在此Django应用程序教程中,choice_set是什么?


144

Django教程中的这一行,编写您的第一个Django应用,第1部分

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

它是如何choice_set存在的?它是什么?

我想这choice部分是Choice本教程中使用的模型的小写版本,但是什么是choice_set?你能详细说明吗?

更新:根据Ben的回答,我找到了此文档:遵循“向后”关系


我应该已经链接到该文档,它比我的答案更清晰。
本·詹姆斯

@Ben James:不,我很高兴以另一种方式制定它,尤其是详细阐述ORM的工作方式。Django文档有时可能很简洁。
彼得·莫滕森

40
谢谢您提出这个问题,我对此感到困惑,因为他们没有在本教程中对此进行解释。
claudio

4
哇,这是一个新手的代码。对我而言,障碍在于了解我们正在获得一个与问题相关的选择对象,以便将其choice.votes加一。到目前为止,本教程中尚未提及RelatedManager概念,因此它可能是真正的绊脚石。
Frozenjim 2015年

@PeterMortensen您可以更新描述它的文档吗?谢谢
MH

Answers:


178

您创建了一个外键Choice,每个外键都与关联Question

因此,每个Choice显式都有一个question字段,您可以在模型中声明该字段。

Django的ORM也遵循这种关系Question,在每个实例上自动生成一个名为foo_setwhere Foo是模型的ForeignKey字段,其中包含该模型的字段。

choice_set是一个RelatedManager可以创建ChoiceQuestion实例相关的对象的查询集的,例如q.choice_set.all()

如果您不喜欢foo_setDjango自动选择的命名,或者您对同一个模型拥有多个外键并需要区分它们,则可以使用related_name参数to 来选择自己的替代名称ForeignKey


谢谢。我现在知道得多了。choice_set不是“经理”吗?(可以返回QuerySet类的实例)。还是同一件事?
彼得·莫滕森

2
您是正确的,它RelatedManager可以创建查询集。
本·詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.