Я делаю что-то не так при фильтрации аннотации на основе подзапроса? Или почему псевдоним не используется вместо вычисления подзапроса снова? Вот глупый пример, который демонстрирует мое замешательство
Foo.objects.annotate(
progress=Subquery(
Job.objects.annotate(ps=Sum('progress')).values('ps')[:1],
output_field=IntegerField()
)
).filter(progress__gt=0)
в настоящее время становится
SELECT "foo"."id",
(SELECT SUM(U0."progress") AS "ps"
FROM "job" U0
GROUP BY U0."id",
U0."progress"
LIMIT 1) AS "progress"
FROM "foo"
WHERE
(SELECT SUM(U0."progress") AS "ps"
FROM "job" U0
GROUP BY U0."id",
U0."progress"
LIMIT 1) > 0
вместо просто
SELECT "foo"."id",
(SELECT SUM(U0."progress") AS "ps"
FROM "job" U0
GROUP BY U0."id",
U0."progress"
LIMIT 1) AS "progress"
FROM "foo"
WHERE
progress > 0