Условное агрегирование полей внешнего ключа

Я хотел бы получить подсчет объектов внешнего ключа с помощью 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" и я понятия не имею, почему это происходит.

Вернуться на верх