我有一个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