Django получить аннотированные поля модели - PullRequest
0 голосов
/ 24 января 2020

У меня есть две модели 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(maxAward=Max('game__award')).values().order_by('-maxAward')

Но также я хочу показать «дату» для всех выбранных игр (где награда максимальная). Как мне изменить мой запрос?

1 Ответ

0 голосов
/ 24 января 2020

Вы можете указать необходимые поля через дочерние модели:

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')
...