Sono sorpreso che questa domanda non sia venuta fuori. Non ho trovato molto sul web.equivalente Django per l'ultimo inserimento per ogni utente
Utilizzo di Entry.objects.latest('created_at')
È possibile recuperare l'ultima voce per tutti gli oggetti di immissione, ma dire se si desidera l'ultima voce per ciascun utente? Questo è qualcosa di simile a una query del record SQL più recente. Ma come ottengo ciò usando l'ORM? Ecco il mio approccio Mi chiedo se è il modo più efficiente per fare ciò che voglio.
Prima eseguo una query secondaria: gli oggetti sono raggruppati per utente e il campo Max (l'ultimo) created_by viene restituito per ogni utente (created_at__max) Quindi filtro gli oggetti Entry in base ai risultati nella sottoquery e ottengo gli oggetti richiesti.
Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
o utilizzando un manager:
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'))
C'è un modo più efficiente? possibilmente senza sub-query?
Grazie,
Paul
Mi stavo giocando con l'idea di aggiungere un is_latest booleano al mio modello, che ho impostato quando ho salvato una nuova voce nel mio metodo form.save, quindi ho recuperato il precedente oggetto is_latest e lo ho reso falso --- quindi sono due passaggi per ogni voce salvata. Non so se questo è il modo migliore per andare. Eventuali suggerimenti? – Paul