【发布时间】:2016-02-05 21:44:01
【问题描述】:
我有三个模型,
class A(models.Model):
code=models.CharField(max_length=9,unique=True)
class B(models.Model):
submitted_by = models.ForeignKey(D)
a = models.OneToOneField(A)
name = models.CharField(max_length=70,blank=True,default='')
class C(models.Model):
status = models.PositiveSmallIntegerField()
status_time = models.DateTimeField(auto_now_add=True)
a = models.ForeignKey(A)
我需要查询,以便我可以获得代码(来自模型 A)、名称(来自模型 B)和状态时间(来自模型 C)和状态(来自模型 C),其中提交的_by_id=1 和状态应该是最大值每个id。
sql 是:
SELECT A.code ,B.name,C.status,C.status_time FROM `A` INNER JOIN `B` on A.id=B.a_id INNER JOIN `C` on A.id=C.a_id where B.submitted_by_id=1 and C.status_time=(se lect max(C.status_time) from `C` pipeline where C.a_id=A.id)
如果有人可以帮助我处理 django ORM。 我无法理解如何在单个查询中同时使用内部联接、聚合和子查询。
编辑:
B.objects.filter(submitted_by_id=1).values('name','a__code','a__c__status_time','a__c__status').order_by('-a__c__status').first()
我试过这个查询。但它只返回一行,即具有最大状态的行。 我们可以修改它并返回每个 id 的结果吗?
【问题讨论】:
-
仍在寻找答案。我需要这个查询来创建一个数据表视图。
标签: python sql django django-orm