2010-01-12 6 views
95

No es esta línea en el tutorial de Django, Writing your first Django app, part 1:Tutorial de Django: ¿Qué es choice_set?

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

Cómo se choice_set llamado a la existencia y para qué sirve?

Supongo que la parte choice es la versión en minúscula del modelo Choice utilizado en el tutorial, pero ¿qué es choice_set? ¿Puedes elaborar?


Actualización 1: basado en Ben James 'respuesta que encuentra un lugar en la documentación donde se describe: Following relationships "backward".

+0

Debería haber vinculado a esa documentación, es más claro que mi respuesta. –

+0

@Ben James: no, agradezco haberlo formulado de una manera diferente, especialmente la elaboración de lo que está haciendo el ORM. La documentación de Django puede ser concisa a veces. –

+19

Gracias por preguntar esto, estaba confundido porque no lo explican en el tutorial. – n00b

Respuesta

112

Creó una clave externa en Choice que relaciona cada una con un Question.

Por lo tanto, cada Choice tiene explícitamente un campo question, que usted declaró en el modelo.

ORM de Django sigue la relación hacia atrás desde Question también, la generación automática de un campo en cada instancia de llamada foo_set donde Foo es el modelo con un campo ForeignKey a ese modelo.

choice_set es una RelatedManager que puede crear QuerySets de Choice objetos que se refieren a la Question ejemplo, por ejemplo, q.choice_set.all()

Si no te gusta el nombramiento foo_set la que Django elige automáticamente, o si tiene más de una clave externa para el mismo modelo y la necesidad de distinguirlos, usted puede elegir su propio nombre primordial con el argumento de related_nameForeignKey.

+0

Gracias. Sé mucho más ahora. ¿Choice_set no es un "Administrador"? (que puede devolver una instancia de la clase QuerySet). ¿O es la misma cosa? –

+1

Tiene razón, es un 'RelatedManager' que puede crear querysets. –

Cuestiones relacionadas