在下面的例子中,我有一個模型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