我有以下模型结构:
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,我知道这可以通过两个步骤轻松完成,但在这一点上,更多的是了解它是如何工作的个人好奇心。