Django ORM: Используйте псевдоним аннотации в последующих аннотациях
Я хочу повторно использовать псевдоним аннотации в последующих выражениях. Как заставить Django генерировать SQL, подобный следующему:
select
a*b as x
x/d as y
from my_table;
Обратите внимание, как x
просто ссылается на x/d
, а не разворачивается в (a*b)/d
. Возможно ли такое в Django?
Причина, по которой я хочу это сделать, заключается в том, что мои запросы очень большие и сложные. При использовании регулярных аннотаций Django многократно дублирует большие выражения, и результирующий вывод запроса становится чрезмерно сложным и трудным для отладки и обеспечения корректности.
Как насчет этого?
from django.db.models import F
class TestListView(ListAPIView):
queryset = Test.objects.annotate(x=F('a') * F('b'), y=F('x') / F('d'))
...
Если преобразовать приведенный выше запрос, то он будет выглядеть следующим образом.
SELECT "test_test"."id", "test_test"."a", "test_test"."b", "test_test"."d",
("test_test"."a" * "test_test"."b") AS "x",
(("test_test"."a" * "test_test"."b") / "test_test"."d") AS "y"
FROM "test_test"