2
我有一個模型「發票」使用方法的代碼問題「與」在Django
def item_objects(self):
return self.invoiceitem_set.filter(kind='item')
然後我有在其上下文「發票」
在模板中我使用模型的模板一個與item_objects
{% with item_object=invoice.item_objects%}
{{item_object}}
{{item_object}}
{% endwith %}
不管標籤,試圖緩存我還打我每次通話時長爲數據庫{{item_object}}
我在做什麼錯?
使用調試工具可以更有效地使用調度工具我發現每個{{ item_object}}我打了數據庫。我不看數數或其他任何事情,只是勉強。 {{item_object}} 這裏是模板http://pastebin.com/PJQFYYE6 – 2012-03-14 18:45:05
引用查詢集本身對它調用'__repr__'。由於Django的表示取決於實時結果,因此每次都可能強制一個新的查詢。然而,這並不是你實際上在模板中實際做的事情(即你要循環查詢集或像count那樣對其執行某種其他操作)。如果你真的做了一些真實的事情,你不應該再看到多個點擊數據庫。 – 2012-03-14 18:50:05
克里斯是對的。我建議在Pycon中查看James Bennett最近的[Django In Depth](http://pyvideo.org/video/610/django-in-depth)會話,其中他解釋了什麼觸發了對QuerySet的評估。 Plus:將'invoice.item_objects'改爲''nvoice.item_objects.all'只會對查詢集進行一次評估。 – roam 2012-03-14 18:57:24