2010-03-04 5 views
13

Il modello1 ha una chiave esterna in Model2. E Model2 ha un ForeignKey (Model3, null = True, blank = True) a Model3. Per impostazione predefinita, quando utilizzo select_related() su Model1, Model3 non è selezionato a causa di null = True. Come posso forzare select_related() a seguire un foreign_key che ha ha null = True?Come forzare select_related() per selezionare ForeignKeys che hanno attributo null = True?

L'unico modo che posso pensare è quella di selezionare in modo esplicito queste chiavi esterne:

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

E 'questo l'unico modo?

risposta

14

Sì, questo è il modo in cui dovresti selezionare gli elementi correlati con null = True.

Direttamente dal docs for select_related:

È possibile fare riferimento a qualsiasi ForeignKey o rapporto OneToOneField nell'elenco dei campi passati a select_related. Ths include chiavi esterne che hanno null = True (a differenza della chiamata select_related() predefinita).

C'è un motivo per cui è necessario un altro modo per eseguire questa azione? Altrimenti, hai già ragione.

+0

Ho molti campi ForeignKey impostati su null = True. Preferirei non elencarli tutti. Ma credo che dovrò. –

+1

Hai ragione di nuovo. Sembra un sacco di battitura, ma questo è tecnicamente un caso d'uso in un angolo. Meglio che non essere in grado di select_related affatto però. Per favore aggiungi la tua risposta se ti viene in mente qualcosa di diverso. – istruble

+0

Età trascorsa alla ricerca di questo .. grazie per la domanda e la risposta! – John

Problemi correlati