Wie kann ich den letzten Datensatz in einem bestimmten Abfragesatz abrufen?
django
django-queryset
Stephen
quelle
quelle
Django Doc :
quelle
Der einfachste Weg ist:
Sie verwenden dies auch, um den ersten Eintrag wie folgt zu erhalten:
quelle
books.objects.last()
undbooks.objects.first()
sollte den Trick machen.XYZ.objects.first()
undXYZ.objects.last()
Django> = 1,6
QuerySet-Methoden first () und last () wurden hinzugefügt. Hierbei handelt es sich um praktische Methoden, die das erste oder letzte Objekt zurückgeben, das den Filtern entspricht. Gibt None zurück, wenn keine übereinstimmenden Objekte vorhanden sind.
quelle
So erhalten Sie das erste Objekt:
So erhalten Sie die letzten Objekte:
Sie können Filter verwenden
Das funktioniert bei mir.
quelle
Wenn der Abfragesatz bereits erschöpft ist, können Sie dies tun, um einen weiteren DB-Hinweis zu vermeiden -
Nicht benutzen
try...except...
.Django wirft
IndexError
in diesem Fall nicht.Es wirft
AssertionError
oderProgrammingError
(wenn Sie Python mit der Option -O ausführen)quelle
Wenn Sie Django 1.6 und höher verwenden, ist es jetzt viel einfacher, da die neue API eingeführt wurde -
Es wird spätestens () mit umgekehrter Richtung geben.
ps - Ich kenne die alte Frage. Ich poste, als ob jemand in Zukunft auf diese Frage stößt. Er lernt diese neue Funktion kennen und verwendet nicht die alte Methode.
quelle
Sie können
Model.objects.last()
oder verwendenModel.objects.first()
. Wenn noordering
definiert ist, wird das Abfrageset basierend auf dem Primärschlüssel sortiert. Wenn Sie eine Abfrage zum Bestellverhalten wünschen, können Sie sich auf die letzten beiden Punkte beziehen.Wenn Sie dies tun möchten ,
Model.objects.all().last()
um das letzte undModel.objects.all().first()
das erste Element in einem Abfragesatz abzurufen oderfilters
ohne einen zweiten Gedanken zu verwenden. Dann sehen Sie einige Einschränkungen unten.Der wichtige Teil, der hier zu beachten ist, ist, dass, wenn Sie keine
ordering
in Ihr Modell aufgenommen haben, die Daten in beliebiger Reihenfolge vorliegen können und Sie ein zufälliges letztes oder erstes Element haben, das nicht erwartet wurde.Z.B. Angenommen, Sie haben ein Modell
Model1
mit 2 Spaltenid
unditem_count
10 Zeilen mit den IDs 1 bis 10. [Es ist keine Reihenfolge definiert]Wenn Sie Model.objects.all (). Last () wie folgt abrufen, können Sie jedes Element aus der Liste der 10 Elemente abrufen. Ja, es ist zufällig, da es keine Standardreihenfolge gibt.
Was kann man also tun?
ordering
basierend auf einem beliebigen Feld oder Feldern in Ihrem Modell definieren. Es gibt auch Leistungsprobleme. Bitte überprüfen Sie dies auch. Ref: Hierorder_by
beim Abrufen verwenden. So was:Model.objects.order_by('item_count').last()
quelle
Der einfachste Weg, ohne sich um die aktuelle Reihenfolge kümmern zu müssen, besteht darin, das QuerySet in eine Liste zu konvertieren, damit Sie die normale negative Indizierung von Python verwenden können. Wie so:
quelle