Wie wähle ich aus mehreren Tabellen in einer Abfrage mit Django?

8

Ich habe zwei Tabellen, eine "Firma" und eine "Angestellte":

%Vor%

Und ich möchte jeden Angestellten in einer Tabelle auflisten, mit der Firma daneben. Was einfach genug ist, indem Sie employees = Employee.objects.all() und in der Template-Schleife durch den Aufruf aufrufen und {{employee.company.name}} aufrufen.

Das Problem mit diesen Lösungen besteht darin, dass für jedes Element in der Schleife eine neue Abfrage erstellt wird. Für jeden Mitarbeiter gibt es also eine Anfrage an das Unternehmen, etwa so:

%Vor%

Stattdessen möchte ich diesen Beitritt zunächst in derselben Abfrage machen, um die Mitarbeiter zu bekommen. Etwas wie das:

%Vor%

Ist das mit dem Django QuerySet möglich? Wenn nicht, gibt es einen Weg, um dieses Problem zu lösen (ohne rohe SQL)? Oder sollte dieses Verhalten ignoriert, zwischengespeichert und als "optimiert" betrachtet werden?

    
tdolsen 11.03.2010, 14:17
quelle

3 Antworten

22

Mit select_related() werden die entsprechenden Attribute vorab ausgefüllt:

%Vor%     
Ignacio Vazquez-Abrams 11.03.2010, 14:21
quelle
7

Ich denke, Sie suchen nach der select_related-Methode Ihres Abfrage-Sets. Siehe das Dokument

  

select_related ()

     

Gibt ein QuerySet zurück, das   folgt automatisch dem Fremdschlüssel   Beziehungen, wählen Sie das aus   zusätzliche verwandte Objektdaten, wenn es   führt seine Abfrage aus. Das ist ein   Leistungsverstärker, der resultiert   (manchmal viel) größere Abfragen aber   bedeutet spätere Verwendung des Fremdschlüssels   Beziehungen benötigen keine Datenbank   Abfragen

    
makapuf 11.03.2010 14:24
quelle
1

Es ist eine alte Frage, lassen Sie mich eine neue Antwort geben.

Tatsächlich können Sie das tun:

%Vor%

Dann sucht Django automatisch nach der Unternehmensklasse und findet den Firmennamen für Sie.

auf der Vorlagenseite, verwenden Sie {{employee.company__name}}, dann wird der Firmenname korrekt angezeigt.

    
Ken 19.01.2018 12:51
quelle