2010-05-07 54 views
4

我需要在頁面上顯示多個表單(最多10個)模型。這是我用來完成這個的代碼。創建沒有多個查詢的Django formset

TheFormSet = formset_factory(SomeForm, extra=10) 
... 
formset = TheFormSet(prefix='party') 

return render_to_response('template.html', { 
     'formset' : formset, 
}) 

的問題是,它在我看來,Django的查詢爲每個在該formset形式的數據庫,即使在它們顯示的數據是一樣的。

這是Formsets的工作方式還是我做錯了什麼?有沒有辦法解決它在Django裏面,或者我必須使用JavaScript的解決方法?

+0

你可能會檢查這個問題的解決方案http://stackoverflow.com/questions/15203207/prevent-django-from-querying-for-foreignkey-options-for-every-form-in-modelforms – 2013-03-15 22:35:18

回答

1

如果您使用modelformset_factory而不是formset_factory,會發生什麼情況?這有幫助嗎?

+0

它不,Django仍然在查詢formset中的每個表單。 – Martin 2010-05-17 08:32:42

0

你確定django查詢數據庫嗎?嘗試使用Django Debug Toolbar來查看django實際進行的查詢。

+0

感謝您的建議。我安裝了工具欄,它確認了大量的查詢。該模型有許多外鍵字段,因此要在表單上顯示總共8個查詢,這已經是很多了,所以當我想要顯示10個時,總共有80個查詢被做出來! – Martin 2010-05-17 08:34:32

+0

是否確定在創建formset時執行了對數據庫的查詢?或者可能會在您使用數據庫中的數據填充formset時進行查詢?無論如何,請嘗試在您的查詢集上使用[select_related] [1]以減少實際查詢的數量 [1]:http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4 – dragoon 2010-05-17 19:27:07

1

如果查詢全部完全相同,則可能需要查看johnny-cache,看看是否會提高性能。

+0

我會仔細研究一下,謝謝! – Martin 2010-05-17 08:35:19