Che cos'è choice_set in questo tutorial dell'app Django?


144

C'è questa linea nel tutorial di Django, Scrivere la tua prima app Django, parte 1 :

p.choice_set.create(choice='Not much', votes=0)

Come viene choice_setchiamato all'esistenza e che cos'è?

Suppongo che la choiceparte sia la versione minuscola del modello Choiceutilizzato nel tutorial, ma che cos'è choice_set? Puoi elaborare?

AGGIORNAMENTO: Sulla base della risposta di Ben , ho trovato questa documentazione: seguenti relazioni "arretrate" .


Avrei dovuto collegarmi a quella documentazione, è più chiaro della mia risposta.
Ben James,

@Ben James: no, apprezzo di averlo formulato in modo diverso, in particolare l'elaborazione di ciò che l'ORM sta facendo. La documentazione di Django può essere concisa a volte.
Peter Mortensen,

40
Grazie per avermelo chiesto, ne sono rimasto confuso perché non lo spiegano nel tutorial.
claudio

4
Wow, questa è una riga di codice caricata per un principiante. Per me l'ostacolo era capire che stiamo ottenendo un oggetto Choice, correlato alla domanda, al fine di incrementare la sua scelta. Voti di uno. Il concetto di RelatedManager non è stato menzionato nel tutorial fino a questo punto, quindi può essere un vero ostacolo.
frozenjim,

@PeterMortensen puoi aggiornare la documentazione in cui è descritta? grazie
MH,

Risposte:


178

Hai creato una chiave esterna su Choicecui si collega ciascuno a Question.

Quindi, ognuno Choiceha esplicitamente un questioncampo, che hai dichiarato nel modello.

L'ORM di Django segue anche la relazione all'indietro Question, generando automaticamente un campo su ogni istanza chiamato foo_setdove si Footrova il modello con un ForeignKeycampo per quel modello.

choice_setè un oggetto RelatedManagerche può creare interrogazioni di Choiceoggetti che si riferiscono Questionall'istanza, ad esq.choice_set.all()

Se non ti piace la foo_setdenominazione che Django sceglie automaticamente, o se hai più di una chiave esterna per lo stesso modello e devi distinguerle, puoi scegliere il tuo nome prevalente usando l' related_nameargomento per ForeignKey.


Grazie. Ora ne so molto di più. Choice_set non è un "Manager"? (che può restituire un'istanza della classe QuerySet). O è la stessa cosa?
Peter Mortensen,

2
Hai ragione, è uno RelatedManagerche può creare interrogazioni.
Ben James,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.