【问题标题】:What is choice_set in this Django app tutorial?这个 Django 应用教程中的choice_set 是什么?
【发布时间】:2011-01-04 03:52:51
【问题描述】:

Django 教程中有这一行,Writing your first Django app, part 1

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

choice_set 是如何产生的,它是什么?

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

更新:根据Ben 的回答,我找到了这个文档:Following relationships "backward"

【问题讨论】:

  • 我应该只是链接到该文档,它比我的答案更清楚。
  • @Ben James:不,我很欣赏它以不同的方式表述,特别是对 ORM 正在做什么的详细说明。 Django 文档有时可能很简洁。
  • 感谢您提出这个问题,我对此感到困惑,因为他们在教程中没有解释。
  • 哇,对于新手来说,这是一个加载的代码行。对我来说,障碍是理解我们得到了一个与问题相关的选择对象,以便将它的choice.votes 加一。到目前为止,教程中还没有提到 RelatedManager 概念,因此它可能是一个真正的绊脚石。
  • @HemantKumar 我试图更正文档但未获批准。如果您发现相同的问题,请随时在 PR 中发表评论:github.com/django/django/pull/13330

标签: python django orm


【解决方案1】:

您在 Choice 上创建了一个外键,将每个外键与 Question 相关联。

因此,每个Choice 都明确地有一个question 字段,您在模型中声明了该字段。

Django 的 ORM 也遵循从 Question 向后的关系,在每个实例上自动生成一个名为 foo_set 的字段,其中 Foo 是具有 ForeignKey 字段的模型。

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

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

【讨论】:

  • 谢谢。我现在知道的更多了。不是choice_set 是“经理”吗? (可以返回类 QuerySet 的实例)。还是一样的?
  • 你是对的,它是一个RelatedManager,它可以创建查询集。
猜你喜欢
  • 2014-04-06
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多