django教程民意测验应用程序,试图了解逻辑

时间:2018-10-18 23:06:59

标签: python django python-3.x django-models

我正在尝试理解将外键链接到主键的逻辑,到目前为止,一切似乎都非常简单,只有这一部分使我失望,如果有人可以澄清我会很感激的话

因此,这第一部分是将具有主键1的行链接到变量q

>>> q = Question.objects.get(pk=1)


>>> q.choice_set.all()
<QuerySet []>

基本上创建选择并将它们链接到q(由与主键1相关的问题组成)

# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>

这就是让我失望的部分!为什么我突然不得不在最后一个选择上将其设置为变量c?

>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice objects have API access to their related Question objects.

我看到问题是在变量c内设置的,但有什么意义,是否有一个特定的原因必须将最后一个选择设置为新变量c?

这是常规吗?每次我创建某种类型的外键关系时,我的子实体(在这种情况下为选择)最终都链接到新变量(在这种情况下为c),什么是的意义?

>>> c.question
<Question: What's up?>

# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()

我试图浏览有关推理的文档,但找不到任何东西

1 个答案:

答案 0 :(得分:1)

创建对象时,不必为其分配变量。如果您打算使用创建的对象,这将很方便。

object = Model.objects.create(parameters)

Model.objects.create(parameters)
object = Model.objects.get(parameters)

都一样。 ForeignKey只是创建对象时存储的另一个参数(或field)。

一个ForeignKey字段将对对象的引用存储在另一个Model中。当他们调用c.question时,它将返回question的{​​{1}}字段中引用的choice对象。 ForeignKey对象的__str__方法是您看到的文本。