django - 在后续注释中使用注释的结果

时间:2017-05-31 13:26:17

标签: python django annotate

我有以下模型结构:

Model A:
    [no question-relevant fields]

Model B:
    linked_to = ForeignKey(A, related_name='involved')
    date = DateField()
    amount = IntegerField()

我试图做的是为每个对象获取所有相关的模型B,从该子集获取最新的日期,然后计算具有相同日期和相同日期的所有模型B的总和连接一个对象。

现在我正在使用此查询:

A.objects.all().annotate(latest_date=Max('involved__date'))

这将返回每个A对象的正确最新日期,接下来我尝试:

A.objects.all().annotate(latest_date=Max('involved__date')).annotate(total=Sum(Case(When(involved__date=F('latest_date'), then='involved__amount'))))

但我得到了

AttributeError: 'Case' object has no attribute 'name'

我以前使用过多个注释,没有任何问题,不同之处在于我以前总是使用以前带有现有字段的注释值,而不是来自Max / Min,所以我不确定如果这有所不同。

Django版本是1.8

我不能在这里使用任何原始SQL,我知道这可以通过两个步骤轻松完成,但在这一点上,更多的是了解它是如何工作的个人好奇心。

0 个答案:

没有答案