Me sorprende que esta pregunta no haya surgido. No se pudo encontrar mucho en la web.Django equivalente para la última entrada para cada usuario
Utilizando Entry.objects.latest('created_at')
Puedo recuperar la última entrada para todos los objetos de entrada, pero decir si deseo la última entrada para cada usuario? Esto es algo similar a una última consulta de registro de SQL. Pero, ¿cómo logro esto usando el ORM? Aquí está mi enfoque Me pregunto si es la forma más eficiente de hacer lo que quiero.
Primero realizo una sub consulta: Los objetos se agrupan por usuario y se devuelve el campo Max (última) created_by para cada usuario (created_at__max) Luego filtro los objetos Entry basados en los resultados en la subconsulta y obtengo los objetos requeridos.
Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
o el uso de un gestor de:
class UsersLatest(models.Manager):
def get_query_set(self):
return super(UsersLatest,self).get_query_set().filter(created_at__in=self.model.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
¿Hay una manera más eficiente? posiblemente sin sub consulta?
Gracias,
Paul
que estaba jugando con la idea de añadir un booleano is_latest a mi modelo, la cual di al guardar una nueva entrada en mi método form.save, que luego se recupera el objeto is_latest anterior y lo hará falsa --- por lo que hay hay dos pasos para guardar cada entrada. No sé si esta es la mejor manera de hacerlo. ¿Alguna sugerencia? – Paul