具有聚合外键的嵌套查询

时间:2013-07-09 16:02:45

标签: sql django django-models django-queryset

我有这样的两个模型

class Company(models.Model):
    raising = models.DecimalField()

class Investment(models.Model):
    company = models.ForeignKey(Company)
    amount  = models.DecimalField()

现在我想找到累积投资的所有公司<{1}}

如果我向名为raising的公司添加动态属性以汇总投资金额,我可以这样做:

raised_so_far

但是过滤发生在SQL级别,所以这是不可能的。

到目前为止,这是我最好的尝试:

Company.objects.filter(raised_so_far__lt=F('raising'))

如何使用父对象过滤外键的聚合?

1 个答案:

答案 0 :(得分:1)

您只需要使用总投资(通过连接处理)注释查询集,然后使用F对象进行查询以使用带注释的值,如字段。

Company.objects.annotate(total_investments=models.Sum('investments__amount')).filter(raising__gt=models.F('total_investments'))

而且,你正在加薪。