Подтвердить что ты не робот

Оркестр Django получает последние данные для каждой группы

Я использую django 1.6 с Mysql

У меня есть эти модели

class Student(models.Model):
     username = models.CharField(max_length=200,unique = True)

class Score(models.Model)
     student = models.ForeignKey(Student)
     date = models.DateTimeField()
     score = models.IntegerField()

Теперь я хочу получить последнюю запись о результатах для каждого учащегося.
я пробовал

Score.objects.values('student').annotate(latest_date=Max('date'))

Я также пробовал

Score.objects.values('student__username').annotate(latest_date=Max('date'))

как описано Django ORM - Получить последнюю запись для группы но это не помогло.

4b9b3361

Ответ 1

Это должно работать на Django 1. 2+ и MySQL:

Score.objects.annotate(
  max_date=Max('student__score__date')
).filter(
  date=F('max_date')
)

Ответ 2

Если ваша БД является postgres, которая поддерживает distinct() в поле, вы можете попробовать

Score.objects.order_by('student__username', '-date').distinct('student__username')