[英]How do I select from a subquery using the Django ORM?
我有一张表只是插入。 它包含id,object_id和user_id的列。 更新记录时,不是更新行,而是使用匹配的object_id创建新记录。
我正在尝试拉出与给定user_id匹配的所有记录,每个object_id具有最高id。
我可以做一些我试图用子查询来描述的东西:
SELECT * FROM (SELECT * FROM table WHERE user_id = 100 ORDER BY object_id, id DESC) adr_table GROUP BY object_id
我尝试使用.raw()方法,但它返回一个RawQuerySet对象,我试图将它提供给需要QuerySet的表单。
理想情况下我想摆脱.raw()并使用Django ORM,但如果不可能,我怎样才能将RawQuerySet转换为常规QuerySet?
请试试这个:
from django.db.models import Max
Model.objects.filter(user_id=100).values('object_id').annotate(Max('id'))
如果我找到你,桌面结构是:
----------------------------
| Table |
----------------------------
| id | user_id | object_id |
----------------------------
| 1 | 100 | 10 |
----------------------------
| 2 | 100 | 20 |
----------------------------
| 3 | 200 | 80 |
----------------------------
| 4 | 100 | 80 |
----------------------------
| 5 | 100 | 10 |
----------------------------
您的查询结果应该是:
----------------------------
| Table |
----------------------------
| id | user_id | object_id |
----------------------------
| 4 | 100 | 80 |
----------------------------
| 2 | 100 | 20 |
----------------------------
| 5 | 100 | 10 |
----------------------------
然后尝试distinct() ,如下所示:
Model.objects.filter(user_id=100).order_by('-object_id', '-id').distinct('object_id')
这应该返回带有user_id
等于100的记录的QuerySet
,然后按object_id
排序, id
按降序排序,并且由于object_id
上的distinct
,只有每个相同object_id
的第一条记录将被采用,具有指定的顺序将是一个id
最高的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.