我有一個Django my_forms.py這樣的:懶惰選擇
class CarSearchForm(forms.Form):
# lots of fields like this
bodystyle = forms.ChoiceField(choices=bodystyle_choices())
每一個選擇是例如(「轎車」,「轎車(15輛)」)。所以選擇是通過這個函數來計算的。
def bodystyle_choices():
return [(bodystyle.bodystyle_name, '%s (%s cars)' %
(bodystyle.bodystyle_name, bodystyle.car_set.count()))
for bodystyle in Bodystyle.objects.all()]
我的問題是選擇功能正在執行每次我只是導入my_forms.py。我認爲這是由於Django聲明其字段的方式:在類中,而不是在類方法中。這很好,但我的views.py會導入my_forms.py,因此無論使用哪個視圖,都會對每個請求執行選擇查找。
我想,也許把選擇= bodystyle_choices沒有支架會的工作,但我得到:
'function' object is not iterable
很顯然,我可以使用緩存,並把剛剛在所需的視圖功能的「進口my_forms」,但不改變主要觀點:我的選擇需要懶惰!
絕對是最好的解決方案,這應該是被接受的答案。 – 2011-02-27 16:17:22