我正在尝试理解将外键链接到主键的逻辑,到目前为止,一切似乎都非常简单,只有这一部分使我失望,如果有人可以澄清我会很感激的话
因此,这第一部分是将具有主键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()
我试图浏览有关推理的文档,但找不到任何东西
答案 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__
方法是您看到的文本。