我想为表中的每个对象检索两个字段的总和(它们本身就是聚合)。
以下内容可能会更好地描述我所追求的内容但导致Unknown column in field list
- 错误:
items = MyModel.objects.annotate(
field1=Sum("relatedModel__someField"),
field2=Sum("relatedModel__someField")).extra(
select={"sum_field1_field2": "field1 + field2"})
我也尝试使用F()进行字段查找,但这给了我一个无效的sql语句。
非常感谢任何关于如何解决这个问题的想法。
答案 0 :(得分:6)
这就是你想要的?
items = MyModel.objects.extra(
select = {'sum_field1_field2': 'SUM(relatedModel__someField) + SUM(relatedModel__someField)'},
)
答案 1 :(得分:0)
要使其适用于多对多或多对一(反向)关系,您可以使用以下内容:
items = MyModel.objects.extra(
select = {'sum_field1_field2': 'SUM("relatedModel"."someField") + SUM("relatedModel"."someField")'},
)
但如果你需要另一个注释,例如count,那么这也会破坏,因为extra会将语句添加到GROUP BY子句中,而不允许使用聚合函数。