Ich habe ein Modell mit einer Reihe von Fremdschlüsselfeldern, z. B. das Modell Product mit den Feldern 'type', 'level', 'color', 'intensity' (nur ein allgemeines Beispiel).
Ich habe dann eine Seite, um alle Produkte eines bestimmten Typs zu bearbeiten, indem ich ein Typ-Formular mit den Produkten als Inline-Formularsatz mit der Option, zusätzliche Produkte inline hinzuzufügen, verwende extra=10
.
Die Sache, die ich sehr seltsam finde ist, dass jedes Mal, wenn ich eine der Fremdschlüssel-Auswahl-Felder auf der Vorlage ausgeben Django die Datenbank für die erhalten die Optionen (jedes Mal) abfragt.
Zum Beispiel:
{% for form in formset %}
{{ form.level }}
{{ form.color }}
{{ form.intensity }}
{% endfor %}
Bei 20 Produkten (und 10 leeren Zusatzformularen) gibt der obige Code 30 select * from ...
von Level, Farbe und Intensität mit insgesamt 90 Abfragen (aufgedeckt mit der Django Debug Toolbar), wobei 3 ausreichend sein sollten. Es ist unwahrscheinlich, dass sich die Optionen in der Mitte der Anfrage ändern, aber selbst wenn sie es täten, würde ich definitiv nicht wollen, dass einige neu hinzugefügte Optionen nur in den letzten 5 Formularen erscheinen.
Gibt es eine Möglichkeit, meine Modelle/Formulare/Views/Templates zu optimieren, damit die Datenbank nicht unnötig so belastet wird?
-
Disclaimer: Ich bin relativ neu in django und Python und kann nicht helfen, denken, es muss eine Möglichkeit, dieses irgendwie eingebaut zu adressieren sein.