Представьте, что мы имеем модель Django ORM Meetup
со следующим определением:Django ORM - получить последнюю запись для группы
class Meetup(models.Model):
language = models.CharField()
date = models.DateField(auto_now=True)
я хотел бы принести последнюю Meetup для каждого языка.
Казалось бы, вы могли бы использовать Django Aggregates, чтобы сделать этот поиск легко:
Meetup.objects.annotate(latest_date=Max("date")).values("language", "latest_date")
На мой взгляд, это должно принести «последнюю» Meetup для каждого языка. Но это не тот случай:
>>> Meetup.objects.create(language='python')
<Meetup: Meetup object>
>>> Meetup.objects.create(language='python')
<Meetup: Meetup object>
>>> Meetup.objects.create(language='node')
<Meetup: Meetup object>
>>> Meetup.objects.create(language='node')
<Meetup: Meetup object>
>>> Meetup.objects.annotate(latest_date=Max("date")).values("language", "latest_date").count()
4
Я ожидал получить только две последние встречи на Python и Node!
Как я могу построить запрос, который будет получать только последние встречи для каждого языка?
PS. Я использую MySQL как бэкэнд.
Meetup.objects.filter (язык = "питон") order_by ('- дата') [0] –
@VictorCastilloTorres жаль, что не было ясно. - цель состоит в том, чтобы получить всю уникальную встречу в одном запросе. –