the*_*dev 5 python django annotate
我有以下模型结构:
Model A:
[no question-relevant fields]
Model B:
linked_to = ForeignKey(A, related_name='involved')
date = DateField()
amount = IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想要做的是为每个对象 A 获取所有相关的模型 B,从这个子集中按日期获取最新的模型,然后计算具有相同日期和相同连接的 A 对象的所有模型 B 的总和。
现在我正在使用这个查询:
A.objects.all().annotate(latest_date=Max('involved__date'))
Run Code Online (Sandbox Code Playgroud)
这将为每个 A 对象返回正确的最新日期,接下来我正在尝试:
A.objects.all().annotate(latest_date=Max('involved__date')).annotate(total=Sum(Case(When(involved__date=F('latest_date'), then='involved__amount'))))
Run Code Online (Sandbox Code Playgroud)
但我得到了一个
AttributeError: 'Case' object has no attribute 'name'.
我以前使用过多个注释,没有任何问题,不同之处在于,过去我总是使用来自现有字段的先前注释值,而不是最大值/最小值,所以我不确定这是否有所不同。
Django 版本是 1.8
我不能在这里使用任何原始 SQL,我知道这可以通过 2 个步骤轻松完成,但在这一点上,更多的是个人对了解其工作原理的好奇心。
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |