Im ersten Beispiel wird die zweite Abfrage zwischengespeichert . Im zweiten Fall (glaube ich) werden beide einen DB-Treffer verursachen, es sei denn, Sie verwenden select_related
für die ursprüngliche Abfrage:
BEARBEITEN
Ich liege falsch im zweiten Beispiel. Wenn Sie select_related
in der ursprünglichen Abfrage verwenden, werden Sie die Datenbank überhaupt nicht mehr treffen (Der ForeignKey wird sofort zwischengespeichert). Wenn Sie select_related
nicht verwenden, treffen Sie die Datenbank bei der ersten Abfrage, aber die zweite Abfrage wird zwischengespeichert.
Von:
Der Zugriff auf Eins-zu-Viele-Beziehungen wird beim ersten Zugriff auf das zugehörige Objekt zwischengespeichert. Nachfolgende Zugriffe auf den Fremdschlüssel auf derselben Objektinstanz werden zwischengespeichert.
Beachten Sie, dass die Methode select_related () QuerySet den Cache aller 1: n-Beziehungen im Voraus rekursiv vorab auffüllt.
Tags und Links python django django-models