Как упорядочить запрос Django на основе суммы определенного поля, сгруппированного по другому полю?

как упорядочить запрос Django на основе суммы определенного поля, сгруппированного по другому полю?

  • Модель просто записывает голы, которые забивают игроки, каждый игрок имеет много входов, каждый из которых относится к одному голу.
  • Я пытаюсь найти 3 лучших бомбардира с наибольшим количеством забитых голов.

Вот моя модель :

class Goal(models.Model):
    match = models.ForeignKey(Match,on_delete=models.CASCADE)
    date_time = models.DateTimeField()
    team = models.ForeignKey("teams.Team",on_delete=models.PROTECT,null=True,blank=True)
    player = models.ForeignKey('players.PlayerProfile',related_name="goal_maker",on_delete=models.PROTECT,null=True,blank=True)
    assistant = models.ForeignKey('players.PlayerProfile',related_name="goal_assist",on_delete=models.PROTECT,null=True,blank=True)

Теперь я хочу сгруппировать их по полю player, упорядочив их от the highest player with goals до the lowest one

Что я пробовал

Я пытался просмотреть все записи в базе данных для этой модели Goal.objects.all() и проверить, является ли она тем же игроком, что и я +=1 если нет, то я создаю новую запись, и это, конечно, не лучший способ достичь этого.

Вы можете указать в аннотации PlayerProfile число целей, а затем упорядочить по этому числу и нарезать, так:

from django.db.models import Count

PlayerProfile.objects.annotate(
    total_goals=Count('goal_maker')
).order_by('-total_goals')[:3]
Вернуться на верх