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"
Вернуться на верх