2010-03-04 1 views
13

Model1 hat einen ForeignKey zu Model2. Und Model2 hat ein ForeignKey (Model3, null = True, leer = True) zu Model3. Wenn ich select_related() für Model1 verwende, wird Model3 standardmäßig nicht ausgewählt, weil null = True ist. Wie kann ich erzwingen, dass select_related() einem foreign_key folgt, der null = True hat?Erzwingen Sie select_related(), um ForeignKeys auszuwählen, die null = True-Attribut haben?

Die einzige Art, wie ich denken kann, ist ausdrücklich diese Fremdschlüssel wählen:

model1s = Model1.objects.all().select_related('model2', 'model2__model3') 

Ist dies der einzige Weg?

Antwort

14

Ja, das ist die Art, wie Sie verwandte Elemente mit null = True auswählen würden.

Gerade vom docs for select_related:

Sie einen ForeignKey oder OneToOneField Beziehung in der Liste der Felder übergeben select_related verweisen. Ths enthält Fremdschlüssel mit null = True (im Gegensatz zum Standard-Aufruf select_related()).

Gibt es einen Grund, warum Sie diese Aktion anders durchführen müssen? Wenn nicht, hast du es schon richtig gemacht.

+0

Ich habe viele ForeignKey-Felder, die auf null = True festgelegt sind. Ich würde sie lieber nicht alle aufzählen. Aber ich denke, ich werde es tun müssen. –

+1

Sie haben wieder Recht. Es scheint eine Menge zu tippen, aber das ist technisch ein bisschen eine Ecke Anwendungsfall. Besser als überhaupt nicht auswählen zu können. Bitte fügen Sie Ihre eigene Antwort hinzu, wenn Sie sich etwas anderes einfallen lassen. – istruble

+0

verbrachte Jahre auf der Suche nach diesem .. Danke für die Frage und die Antwort! – John

Verwandte Themen