Django:对象和model_set

时间:2016-12-06 16:33:00

标签: python django

我正在学习django 1.10官方教程第2部分

class  Question(models.Model):
  # ......

class Choice(models.Model):
  question = models.ForeignKey(Question, on_delete=models.CASCADE)
  #.......

最近我看到以下命令: -

q = Question.objects.get(id=1)
q.choice_set.all()

我的问题: -

问题实例如何包含choice_set,我知道它用于访问相关对象。

为什么这无效

c = Choice.objects.get(id=1)
c.question_set.all()

1 个答案:

答案 0 :(得分:4)

问题模型没有对Choice模型的显式引用;但是,Django会自动添加一个反向引用,默认情况下称为choice_set。您可以通过模型上的 related_name 关键字覆盖此项,例如:

div.title:hover

现在,您可以参考以下问题的所有选项:

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

要回答您的第二个问题,您无法使用选择对象中的参考 question_set.all()的原因是因为对于每个选项,只有一个问题加上对问题对象有显式引用。换句话说,Choice模型已经有一个名为问题的字段,它指向问题模型。

希望有所帮助。