Условное агрегирование полей внешнего ключа
Я хотел бы получить подсчет объектов внешнего ключа с помощью django, при этом сам внешний ключ будет изменяться условно. Таким образом, что-то вроде примера ниже.
Game.objects.annotate(
filled=models.Case(
models.When(
GreaterThan(
models.F("size_max"),
(
models.Count(
models.Case(
models.When(
participant_type=1, then="players"
),
models.When(
participant_type=2, then="teams",
),
),
),
),
),
then=1,
),
default=0,
)
)
Я хотел бы добиться следующего:
players
и teams
являются обратными внешними ключами к Game
. Я хочу проверить, превышает ли поле size_max
из Game
счетчик players
или teams
в зависимости от participant_type
. Как мне добиться этого? Любая помощь будет принята с благодарностью.
Приведенный выше запрос приводит к ошибке - он вводит GROUP BY
с именем модели в нем. Таким образом, что-то вроде
GROUP BY ('Game'), "game"."id"
и я понятия не имею, почему это происходит.