Django-запрос для суммирования n наибольших связанных значений

У меня есть база данных, которая отслеживает количество очков игроков за несколько игр. Я хочу создать таблицу лидеров, используя 4 игры каждого игрока с наибольшим количеством очков.

Вот мои модели:

class Event(models.Model):
    name = models.CharField(max_length=120)

class Player(models.Model):
    name = models.CharField(max_length=45)

class Game(models.Model):
    name = models.CharField(max_length=15)

class Score(models.Model):
    player = models.ForeignKey(Player, on_delete=models.CASCADE)
    game = models.ForeignKey(Game, on_delete=models.CASCADE)
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    score = models.IntegerField()

    class Meta:
        unique_together = ["player", "event", "game"]

Я пробовал использовать подзапрос, но кажется, что мой срез игнорируется, и возвращаемая сумма - это все оценки игрока, а не только их 4 лучшие оценки:

scores = Score.objects.filter(player=OuterRef('pk'), event=myEvent).order_by('-score')[:4]
scores = scores.annotate(total=Func(F("score"), function="SUM")).values('total')
leaders = Players.objects.annotate(total=Subquery(scores)).order_by('-total')

Есть идеи, как заставить подзапрос работать? Или лучший способ решения проблемы?

Здравствуйте. Я пользователь Django из Кореи.

Может быть, это сработает.

from django.db.models import Max, Q
score = Score.objects.filter(palyer__name={p})\
 .annotate(max_a=Max('score', filter=Q(game__name={a}))\
 .annotate(max_b=Max('score', filter=Q(game__name={b}))
Вернуться на верх