In Django habe ich zwei Modelle:
%Vor%Ich lege den Rang in eine separate Tabelle, weil jede Ansicht einer Seite dazu führt, dass sich der Rang ändert und ich befürchte, dass all diese Schreibvorgänge meine anderen (meist gelesenen) Abfragen verlangsamen würden.
Ich sammle eine Liste von Products
aus einer einfachen Abfrage:
Ich würde jetzt gerne alle Ränge für diese Produkte bekommen. Ich würde es vorziehen, alles auf einmal zu machen (mit einem SQL-Join) und ich frage mich, wie ich das mit dem Abfragemechanismus von Django ausdrücken kann.
Was ist der richtige Weg, dies in Django zu tun?
Dies kann in Django gemacht werden, aber Sie müssen Ihre Modelle ein wenig anders umstrukturieren:
%Vor%Beim Abrufen von Produktobjekten können Sie nun die Eins-zu-Eins-Beziehung in einer Abfrage mit dem select_related () Methode:
%Vor%Dies erzeugt eine Abfrage, die Produktranglisten mit einem Join abruft:
%Vor%Ich musste das Beziehungsfeld zwischen Product und ProductRank in das Produktmodell verschieben, da es so aussieht, als ob select_related () Fremdschlüsseln nur in eine Richtung folgt.
Fügen Sie der select_related () -Methode des QuerySets einen Aufruf hinzu, obwohl ich nicht davon überzeugt bin, Referenzen in beide Richtungen zu erfassen, ist dies die wahrscheinlichste Antwort.