2010-01-12 10 views
95

Es gibt diese Zeile im Tutorial Django, Writing your first Django app, part 1:Django Tutorial: Was ist Choice_set?

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

Wie choice_set ins Leben gerufen wird, und was ist es?

Ich nehme an, die choice Teil ist die Kleinbuchstaben Version des Modells Choice im Tutorial verwendet, aber was ist choice_set? Kannst du es ausarbeiten?


Update 1: basierend auf Ben James 'Antwort befindet ich einen Platz in der Dokumentation, wo es beschrieben wird: Following relationships "backward".

+0

Ich sollte nur mit dieser Dokumentation verknüpft haben, es ist klarer als meine Antwort. –

+0

@Ben James: Nein, ich schätze es, dass es auf eine andere Art und Weise formuliert wurde, besonders die Ausarbeitung dessen, was das ORM macht. Die Django-Dokumentation kann manchmal kurz sein. –

+19

Vielen Dank für die Frage, ich war verwirrt, da sie es im Tutorial nicht erklären. – n00b

Antwort

112

Sie haben einen Fremdschlüssel unter Choice erstellt, der sich auf eine Question bezieht.

Also, jedes Choice hat explizit ein question Feld, das Sie im Modell deklariert haben.

Djangos ORM folgt die Beziehung rückwärts von Question auch automatisch ein Feld auf jeder foo_set genannte Instanz zu erzeugen, wo Foo ist das Modell mit einem ForeignKey Feld in dieses Modell.

choice_set ist ein RelatedManager die querysets von Choice Objekte, die betreffen die Question Instanz erstellen kann, z.B. q.choice_set.all()

Wenn Sie nicht wie die foo_set Namensgebung, die Django automatisch wählt, oder wenn Sie mehr als ein Fremdschlüssel auf dem gleichen Modell haben und sie unterscheiden müssen, können Sie Ihre eigenen zwingenden Namen mit dem Argument related_name wählen ForeignKey.

+0

Danke. Ich weiß jetzt viel mehr. Ist choice_set nicht ein "Manager"? (das eine Instanz der Klasse QuerySet zurückgeben kann). Oder ist es das Gleiche? –

+1

Sie haben Recht, es ist ein 'RelatedManager', der Abfragesätze erstellen kann. –

Verwandte Themen