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?