Django教程中的choice_set.all是什么

Bol*_*oze 8 python django

在Django教程中:

       {% for choice in question.choice_set.all %}
Run Code Online (Sandbox Code Playgroud)

我找不到这方面的简短解释.我知道在admin.py文件中,我在选择模型上创建了一个Question模型的外键,这样每个选择都有一个问题.

wim*_*wim 15

那就是Django元类魔法!由于您具有从Choice模型到Question模型的外键,因此您将自动将模型实例上的反向关系question返回到可能的选择集.

question.choice_set.all是选项的查询集,指向您的question实例作为外键.

此反向关系的默认名称是choice_set(因为相关模型已命名Choice).但您可以通过related_name在外键上指定kwarg 来覆盖此默认名称:

class Choice(models.Model):
    ...
    question = models.ForeignKey(Question, related_name='choices')
Run Code Online (Sandbox Code Playgroud)

  • @wim好解释,谢谢.这在[Django教程文档](https://docs.djangoproject.com/en/1.10/intro/tutorial04/)中确实令人困惑,因为您最初使用的是两个名为`Question`和`Choice的db类模型`,所以`choice_set.all`让你觉得你的Choice类中应该有一个名为`choice_set`的方法. (4认同)
  • 这似乎是更新和改进(已经非常出色的)文档的好地方。 (2认同)