2010-01-12 9 views
95

Jest to linia w samouczku Django, Writing your first Django app, part 1:Samouczek Django: Co to jest choice_set?

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

Jak choice_set powołany do istnienia i co to jest?

Przypuszczam, że część choice jest małą wersją modelu Choice używaną w samouczku, ale co to jest choice_set? Czy możesz rozwinąć?


Update 1: oparta na Ben James 'odpowiedź I znajduje swoje miejsce w dokumentacji, gdzie jest opisany sposób: Following relationships "backward".

+0

Powinienem był po prostu połączyć się z tą dokumentacją, jest jaśniejsza niż moja odpowiedź. –

+0

@Ben James: Nie, doceniam to, że sformułowałem to w inny sposób, szczególnie w opracowywaniu tego, co robi ORM. Dokumentacja Django może być czasami zwięzła. –

+19

Dziękuję za pytanie, byłem zdezorientowany tym, ponieważ nie wyjaśniają tego w samouczku. – n00b

Odpowiedz

112

Utworzono klucz obcy pod numerem Choice, który odnosi się do każdego z nich: Question.

Tak więc każde Choice ma wyraźnie pole question zadeklarowane w modelu.

ORM Django następująca zależność wsteczną od Question też automatyczne generowanie pola na każdej instancji o nazwie foo_set gdzie Foo jest model z ForeignKey pola do tego modelu.

choice_set jest RelatedManager które mogą tworzyć querysets z Choice obiektów, które wiążą się z wystąpieniem Question np q.choice_set.all()

Jeśli nie podoba ci się foo_set nazewnictwa, która automatycznie wybiera Django, lub jeśli masz więcej niż jeden klucz obcy do tego samego modelu i trzeba je odróżnić, można wybrać własną nazwę nadrzędny pomocą related_name argument ForeignKey.

+0

Dzięki. Teraz wiem o wiele więcej. Czy choice_set nie jest "menedżerem"? (które może zwrócić instancję klasy QuerySet). Czy to to samo? –

+1

Masz rację, to 'RelatedManager', który może tworzyć zapytania. –