Sie sind überhaupt nicht äquivalent, aber das hängt stark vom jeweiligen Modell ab. Wir wissen nicht, die Einzelheiten des Modells Comments
, aber wenn wir das Feld Verfasser übernehmen ist nicht eindeutig:
Für die erste Anweisung:
Comments.objects.filter(writer=self.request.user).latest('id')
Returns im Wesentlichen das Objekt mit dem größten id unter einem queryset aller Kommentare mit dem bestimmten Verfasser. Wenn man sich die django.db.connections['default'].queries
anschaut, sieht man, dass die resultierende Abfrage eine SELECT .. ORDER_BY .. LIMIT ..
-Anweisung ist.
Für die zweite Aussage:
Comments.objects.get(writer=self.request.user)
Gibt den bestimmten Datensatz fot dieser Schriftsteller. Wenn es mehrere gibt, erhalten Sie eine MultipleObjectsReturned
Ausnahme. Wenn kein Objekt gefunden wird, erhalten Sie eine DoesNotExist
Ausnahme. Für den Fall, dass dies ein eindeutiges Feld wäre oder ein einzelnes Objekt zufällig wäre, wäre die resultierende Abfrage eine SELECT .. WHERE
-Anweisung, die schneller ist.
In Bezug auf die Dokumentation, gibt es mehr Informationen über den Zweck der latest
-Funktion, wenn Sie sich die -Referenz ansehen. Stellen Sie sich mehr Bequemlichkeit von Django vor. Es ist jedoch sehr wichtig zu verstehen, wie Django Abfragen und das resultierende SQL auswertet, und es gibt immer viele Möglichkeiten, die gleiche Abfrage zu erreichen, also ist es eine Frage der Logik.
Sie beide das gleiche Ergebnis, aber bekommen wird verwendet, wenn nur ein Datensatz in der Datenbank und in dem als Filter verwendet wird, um die queryset zu erhalten. Wenn wir get verwenden, wenn die Bedingung fehlschlägt, wird .DoesNotExist-Ausnahme ausgelöst, wo der Filter keinen Fehler auslöst, stattdessen leere Queryset zurückgibt. –
MicroPyramid