la query di django ottiene gli ultimi n record

Diciamo che sto implementando un stream di messaggi, record ordinati per ordine crescente ID, ogni richiesta di recupero, voglio solo consentire di recuperare i 10 record più recenti.

Provai:

Messages.objects.filter(since=since)[:-10] 

E ho avuto un errore nel dire che l’indicizzazione negativa non è supportata.

Il mio attuale lavoro è l’ordine decrescente dell’ID di ordinamento, quindi eseguo:

 Messages.objects.filter(since=since)[:10] 

Ma questo richiede il front end per invertire nuovamente l’ordine.

La mia domanda è, c’è un modo elegante per farlo?

Puoi passare il tuo queryset a invertito :

 last_ten = Messages.objects.filter(since=since).order_by('-id')[:10] last_ten_in_ascending_order = reversed(last_ten) 

Oppure usa [::-1] invece di reversed :

 last_ten = Messages.objects.filter(since=since).order_by('-id')[:10][::-1] 

Se vuoi che gli ultimi X record siano ordinati in ordine decrescente per id , allora non penso che ti serva dal momento che il filtro

 last_ten = Messages.objects.all().order_by('-id')[:10] 

L’uso di -id verrà ordinato in ordine decrescente. Spero che questo è stato utile !!