Django ORM: obtenga el último logging del grupo

Imagine que tenemos el Meetup model Meetup ORM con la siguiente definición:

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

Me gustaría search la última reunión para cada idioma.

Parece que podrías usar agregados de Django para facilitar esta búsqueda:

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

En mi opinión, esto debería search el "último" encuentro para cada idioma. Pero ese no es el caso:

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

¡Esperaba get solo las dos últimas reuniones de Python y Node!

¿Cómo puedo build una consulta que solo busque las últimas reuniones para cada idioma?

PD. Estoy usando MySQL como mi back-end.

Pon tu cláusula de values antes de la annotate .

Desde los documentos de agregación :

Si la cláusula values ​​() precede a la anotación (), la anotación se calculará utilizando la agrupación descrita por la cláusula values ​​().

Sin embargo, si la cláusula anotación () precede a la cláusula values ​​(), las annotations se generarán en todo el set de consultas. En este caso, la cláusula values ​​() solo restringe los campos que se generan en la salida.

Entonces esto debería hacerlo:

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