Nehmen wir an, ich implementiere einen Nachrichtenstrom, sortiere Datensätze nach aufsteigender Reihenfolge der ID, jede Abrufanforderung möchte ich nur zulassen, dass die neuesten 10 Datensätze abgerufen werden.
Ich habe es versucht:
Messages.objects.filter(since=since)[:-10]
Und ich hatte den Fehler, dass die negative Indizierung nicht unterstützt wird.
Meine aktuelle Problemumgehung besteht darin, die ID in absteigender Reihenfolge zu sortieren und dann auszuführen:
Messages.objects.filter(since=since)[:10]
Dies erfordert jedoch, dass das Frontend die Reihenfolge erneut umkehrt.
Meine Frage ist, gibt es eine elegante Möglichkeit, dies zu tun?
[:10]
Schneidenlast_ten = Messages.objects.filter(since=since).order_by('-id')[:10:-1]
. Ich habe es mit einer Standardliste zeitlich festgelegt und es ist 9x schneller.Wenn Sie möchten, dass die letzten X-Datensätze in absteigender Reihenfolge nach ID sortiert werden , brauchen Sie diese seit dem Filter nicht mehr
last_ten = Messages.objects.all().order_by('-id')[:10]
Mit -id wird in absteigender Reihenfolge sortiert. Hoffe das war hilfreich !!
quelle
where
Klausel, während die obige Abfrage eine einfache Auswahl mitorder by
Klausel ist