Как упорядочить запрос 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]