我有三个型号,使用内部联接三个表,并聚集在一个单一的查询
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),其中submitted_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()
我想这query.But它只返回一行即具有最高地位排。 我们可以修改它并返回每个ID的结果。
仍在寻找答案。我需要这个查询来创建一个数据表视图。 –