Django ORM - Holen Sie sich den neuesten Datensatz für die Gruppe

Stellen Sie sich vor, wir haben das Django ORM-ModellMeetup mit folgender Definition:

class Meetup(models.Model):
    language = models.CharField()
    date = models.DateField(auto_now=True)

Ich möchte das neueste Treffen für jede Sprache abrufen.

Es scheint, als könntest du es gebrauchenDjango-Aggregate um diese Suche zu vereinfachen:

Meetup.objects.annotate(latest_date=Max("date")).values("language", "latest_date")

Meiner Meinung nach sollte dies das "neueste" Treffen für jede Sprache abrufen. Das ist aber nicht der Fall:

>>> 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

Ich habe erwartet, nur die beiden neuesten Python- und Node-Meetups zu bekommen!

Wie kann ich eine Abfrage erstellen, die nur die neuesten Meetups für jede Sprache abruft?

PS. Ich benutze MySQL als Backend.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage