在下面的例子中,我有一个模型Proof
,其中包含模型Option
的外键。 我想列出我的模板中的所有选项以及它们各自的证明。我将如何去做有关django的连接?我尝试使用_set.all()
方法,但似乎不适用于查询集,只能在单个列表中使用。在django查询集中访问外键
感谢您的帮助:)
Models.py
class Option(TimeStampActivate):
title = models.CharField(max_length=500,null=True)
user = models.ForeignKey(User)
option = models.CharField(max_length=300)
class Proof(TimeStampActivate):
user = models.ForeignKey(User)
option = models.ForeignKey(Option)
comment = models.CharField(max_length=500,null=True)
link = models.URLField()
View.py
options = Option.objects.all()
感谢这工作! 但以这种方式查找,有没有为循环中的每个项目运行一个新的SQL查找?或者刚刚完成一次连接? – CodeMonkeyB
我不确定,但我认为不会有每个项目的新查找(这是在模板上下文中使用从视图中的查询获得的结果完成的,因此它不会触及数据库)。即使在一个视图中,'Option.objects.all()'一开始并不会触及数据库。查看[queryset API参考](https://docs.djangoproject.com/en/dev/ref/models/querysets/)了解更多信息。 – machaku
[select_related](https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related)和[prefetch_related](https://docs.djangoproject.com/en/dev/ref/models/querysets /#prefetch-related)可以提高检索相关对象的性能。注意:在Django-1.4中预取相关的工作 – machaku