У меня две модели Player и Game
class Player(models.Model):
userId = models.CharField(max_length = 150, primary_key=True)
username = models.CharField(max_length = 250)
email = models.CharField(max_length = 150)
playedGames = models.IntegerField()
class Game(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
date = models.DateTimeField()
award = models.IntegerField()
И запрос, который возвращает список победителей.
wins = Player.objects.annotate(
max_award=Max('game__award')
).filter(
game__award=F('max_award')
).annotate(
date=F('game__date')
award=F('game__award')
).values(
'userId',
'date',
'award'
).order_by('-max_award')
Но есть одна ошибка. Если у игрока 2 или более одинаковых максимальных награды с разными датами, то в результате мы получаем одинаковое количество записей (по одной на каждую дату). Например:
- Алекс, 75, 2020-05-29
- Алекс, 75, 2020-04-23
- Ричард, 68, 2020-05- 27
Но я бы хотел получить список, например:
- Алекс, 75, 2020-05-29
- Ричард, 68, 2020-05-27
Как я могу получить только одну запись для каждого пользователя с его максимальной наградой (с последней датой)?