我正在学习 django 1.10 官方教程第 2 部分
class Question(models.Model):
# ......
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
#.......
Run Code Online (Sandbox Code Playgroud)
最近我看到以下命令:-
q = Question.objects.get(id=1)
q.choice_set.all()
Run Code Online (Sandbox Code Playgroud)
我的问题:-
Question 实例如何包含choice_set,我知道它用于访问相关对象。
为什么这无效
c = Choice.objects.get(id=1)
c.question_set.all()
Run Code Online (Sandbox Code Playgroud)
Question 模型没有明确引用 Choice 模型;但是,Django 会自动添加一个反向引用,默认情况下称为choice_set。您可以通过模型上的related_name关键字覆盖它,例如:
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='choices')
Run Code Online (Sandbox Code Playgroud)
现在,您可以参考以下问题的所有选项:
q = Question.objects.get(pk=1)
q.choices.all()
Run Code Online (Sandbox Code Playgroud)
要回答你的第二个问题,你不能使用来自选择对象的引用question_set.all()的原因是因为对于每个选择,只有一个问题加上对问题对象的显式引用。换句话说,Choice 模型已经有一个名为Question的字段,它指向 Question 模型。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
3497 次 |
| 最近记录: |