Wie kann ich den letzten Datensatz in einem bestimmten Abfrage-Set abrufen?Abrufen des letzten Datensatzes in einem Abfrage-Set
Antwort
Sie einfach so etwas tun könnte, mit reverse()
:
queryset.reverse()[0]
Auch passen diese Warnung aus der Django-Dokumentation:
... beachten Sie, dass
reverse()
sollte im Allgemeinen nur aufgerufen werden, auf einem QuerySet , das eine definierte Reihenfolge hat (z. B. bei der Abfrage eines Modells, das eine Standardreihenfolge definiert, oder wenn mitorder_by()
). Wenn keine solche Bestellung für einen gegebenenQuerySet
definiert ist,reverse()
fordert sie auf, hat keinen wirklichen -Effekt (die Reihenfolge bis vor nicht definiert wurdereverse()
Aufruf und wird bleiben undefiniert danach).
latest(field_name=None)
gibt das letzte Objekt in der Tabelle, nach Datum, mit der field_name als Datumsfeld zur Verfügung gestellt.Dieses Beispiel zeigt den neuesten Eintrag in der Tabelle zurück, nach dem
pub_date
Feld:Entry.objects.latest('pub_date')
Das funktioniert auch. 'Entry.objects.latest ('id')' – Renyi
Dies ist der beste Weg, es zu tun. Außerdem: "Wenn Meta in Ihrem Modell get_latest_by angibt, können Sie das Argument field_name wie in den Dokumenten auf last()" belassen. –
Die einfachste Art und Weise, ohne sich um die aktuelle Ordnung sorgen zu müssen, ist es, die QuerySet zu einem konvertieren Liste, damit Sie Pythons normale negative Indexierung verwenden können. Wie so:
list(User.objects.all())[-1]
Dies wird alle Objekte aus der DB abfragen und dann wird die erste – warvariuc
Guter Punkt! Offensichtlich dachte ich das nicht durch. Die Antwort von .reverse() (aktuell ausgewählt) ist der richtige Weg! –
Bei der Verwendung von django 1.6 oder höher, ist es viel einfacher, jetzt als der neue api eingeführt worden -
Model.object.earliest()
Es gibt aktuelle() mit umgekehrter Richtung.
p.s. - Ich kenne seine alte Frage, ich poste, als ob jemand in dieser Frage landet, sie lernen dieses neue Feature kennen und enden nicht mit der alten Methode.
aus docs: früheste() und letzte() erfordern entweder einen Parameter field_name oder 'get_latest_by' im Modell – panchicore
Django> = 1,6
Added QuerySet Methoden First() und Last(), die Bequemlichkeit Verfahren sind das erste oder das letzte Objekt zurückkehr der Filter entsprechen. Gibt None zurück, wenn keine Objekte übereinstimmen.
Wenn die queryset bereits erschöpft ist, können Sie dies tun, eine andere db Hinweis zu vermeiden -
last = queryset[len(queryset) - 1] if queryset else None
nicht try...except...
verwenden.
Django wirft IndexError
in diesem Fall nicht.
Es wirft AssertionError
oder ProgrammingError
(wenn Sie Python mit -O-Option laufen)
Um Erstes Objekt zu erhalten:
ModelName.objects.first()
zum letzten Objekte erhalten:
ModelName.objects.last()
Sie Filter
ModelName.objects.filter(name='simple').first()
Dies funktioniert für mich nutzen können.
- 1. Abrufen des letzten verknüpften Datensatzes in LINQ?
- 2. C# IEnumerable Abrufen des ersten Datensatzes
- 3. Datum des letzten erfolgreichen Joblaufs abrufen?
- 4. Exit-Code des letzten Shellbefehls in einem anderen Skript abrufen
- 5. Wie bekomme ich _id des letzten Datensatzes von sqlite?
- 6. Zurückgeben des letzten Datensatzes aus dem ElasticSearch-Index
- 7. MySQL - unterschiedliches Ergebnis zur Anzeige des letzten Datensatzes jeder Gruppe
- 8. Kalender - Letzten Tag des vorherigen Monats abrufen
- 9. Android next/Zurück-Taste zum Abrufen des nächsten/vorherigen Datensatzes
- 10. Garantieinitialisierung des Stack - Datensatzes
- 11. zum Abrufen eines bestimmten Datensatzes
- 12. ExtJS - Abrufen der ID des gerade gespeicherten Datensatzes
- 13. Abrufen des letzten Änderungsdatums einer Datei in Java
- 14. Abrufen des Datensatzes zum Erstellen von Assoziationsregeln mit Weka
- 15. Abrufen eines DNS-TXT-Datensatzes in Ruby
- 16. REST-API zum Abrufen des letzten Analysedatums des Projekts?
- 17. Abrufen des letzten Änderungsdatums einer Datei in VB6
- 18. Verwenden von data.table zum Kennzeichnen des ersten (oder letzten) Datensatzes in einer Gruppe
- 19. Serialisierung des Datensatzes in C# mit NewtonSoft.JSon
- 20. Ungültiges Zugriffstoken beim Abrufen des letzten Posts mit Instagram?
- 21. Letzten aktualisierten Datensatz abrufen
- 22. Speicherfehler in Python beim Laden des Datensatzes
- 23. Scoring Konsistenz innerhalb des Datensatzes
- 24. Duplikatschlüsselfehler beim Erstellen des Datensatzes
- 25. Abrufen nur eines Datensatzes basierend auf Name
- 26. Abrufen von Sekunden seit dem letzten Datensatz
- 27. Dynamische Auswahl des Datensatzes in SSRS
- 28. Entfernen des letzten Zeichens aus einem NSMutableString
- 29. Daten des letzten hinzugefügten Ereignisses aus Android-Kalender abrufen
- 30. Erstellen eines Datensatzes in einem Modell beim Erstellen eines Datensatzes in einem anderen Modell in odoo
thnx ... kannte das nicht – Stephen
wie in django docs gesagt,: "Beachten Sie, dass reverse() generell nur in einem QuerySet aufgerufen werden sollte, das eine definierte Reihenfolge hat (zB bei der Abfrage eines Modells, das ein Standardreihenfolge oder bei Verwendung von order_by()) Wenn keine solche Reihenfolge für ein bestimmtes QuerySet definiert ist, hat der Aufruf von reverse() keine Auswirkung (die Reihenfolge war vor dem Aufruf von reverse() undefiniert und bleibt danach undefiniert) . " – jujule
Ich habe diese Warnung in Ihrer Antwort bearbeitet, hoffe, das ist in Ordnung. –