Ответ 1
Это должно работать на Django 1. 2+ и MySQL:
Score.objects.annotate(
max_date=Max('student__score__date')
).filter(
date=F('max_date')
)
Я использую 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 - Получить последнюю запись для группы но это не помогло.
Это должно работать на Django 1. 2+ и MySQL:
Score.objects.annotate(
max_date=Max('student__score__date')
).filter(
date=F('max_date')
)
Если ваша БД является postgres, которая поддерживает distinct()
в поле, вы можете попробовать
Score.objects.order_by('student__username', '-date').distinct('student__username')
Я считаю, что это даст вам ученика и данные
Score.objects.values('student').annotate(latest_date=Max('date'))
Если вам нужны полные записи Score
, кажется, вам придется использовать необработанный SQL-запрос: Фильтрация Django Query по записи с максимальным значением столбца