【发布时间】:2010-10-08 20:30:57
【问题描述】:
我有一个这样的 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' 对象不可迭代
显然我可以使用缓存并将“import my_forms”放在所需的视图函数中,但这并没有改变重点:我的选择需要是懒惰的!
【问题讨论】:
标签: python django forms lazy-evaluation