Ответ 1
это то, что вы хотите?
items = MyModel.objects.extra(
select = {'sum_field1_field2': 'SUM(relatedModel__someField) + SUM(relatedModel__someField)'},
)
Я хочу получить сумму из двух полей (которые являются самими агрегациями) для каждого объекта в таблице.
Ниже описывается немного лучше того, что мне нужно, но результат Unknown column in field list
-Error:
items = MyModel.objects.annotate(
field1=Sum("relatedModel__someField"),
field2=Sum("relatedModel__someField")).extra(
select={"sum_field1_field2": "field1 + field2"})
Я также пытался использовать F() для поиска в поле, но это дает мне неверный оператор sql.
Любые идеи о том, как решить эту проблему, очень ценятся.
это то, что вы хотите?
items = MyModel.objects.extra(
select = {'sum_field1_field2': 'SUM(relatedModel__someField) + SUM(relatedModel__someField)'},
)
Чтобы заставить его работать для многих или для многих (обратных) отношений, вы можете использовать следующее:
items = MyModel.objects.extra(
select = {'sum_field1_field2': 'SUM("relatedModel"."someField") + SUM("relatedModel"."someField")'},
)
Но это также сломается, если вам понадобится другой аннотат, например, для подсчета, потому что дополнительная добавит оператор в предложение GROUP BY, тогда как агрегированные функции там не разрешены.