Django ORM Group By с внешними ключами

user является внешним ключом на tournament.

select u.id, u.display_name, count(t.id) from tournament t join "user" u on t.user_id = u.id where date(t.start_date)> '2022-07-01' group by u.display_name, u.id

Как я могу заставить вышеприведенный SQL-запрос работать с ORM django?

В большинстве случаев попытка перевести sql-запрос в синтаксис Django ORM не является правильным решением.
Насколько я понимаю, вы хотите подсчитать турниры, отфильтрованные по дате, привязанные к пользователю.
Попробуйте что-то вроде:

UserModel.objects.annotate(tournament_count=Count("tournament", filter=Q(start_date__gt=my_date)))

Метод annotate позволяет присутствовать в ResultSet дополнительным столбцам, в основном связанным или вычисляемым. ("tournament" - это имя вашей модели Tournament, если вы определили related_name для пользователя FK, используйте это имя вместо него)
. Если вам действительно нужна группа по, взгляните на это Как сделать запрос как GROUP BY в django?

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