【问题标题】:What is choice_set.all in Django tutorialDjango 教程中的choice_set.all 是什么
【发布时间】:2015-10-23 03:45:20
【问题描述】:

在 Django 教程中:

       {% for choice in question.choice_set.all %}

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

【问题讨论】:

  • 看看这里:stackoverflow.com/questions/2048777/… 几分钟前我在找它;-)
  • .all 与您执行 Choice.objects.all() 时的“全部”相同,即 queryset 方法。请参阅@wim 的回答了解原因
  • @Tom83B +1 指出了正确的问题并提供了很好的解释。

标签: python django


【解决方案1】:

这就是 Django 元类的魔力!由于您有一个从 Choice 模型到 Question 模型的外键,您将自动将 inverse relation 实例上的 question 模型返回到可能的选择集。

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

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

class Choice(models.Model):
    ...
    question = models.ForeignKey(Question, related_name='choices')

【讨论】:

  • @wim 很好的解释,谢谢。这在Django tutorial documentation 中确实令人困惑,因为您最初使用两个名为QuestionChoice 的数据库类模型,所以choice_set.all 让您认为您的Choice 类中应该有一个名为choice_set 的方法什么的。
  • 这似乎是一个更新和改进(已经非常出色的)文档的好地方。
猜你喜欢
  • 2017-05-15
  • 2016-04-25
  • 2011-01-04
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2016-09-16
  • 2011-07-24
  • 1970-01-01
相关资源
最近更新 更多