У меня есть 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 объявляет свои поля: в классе, но не в методе класса. Это нормально, но my views.py импортирует my_forms.py, поэтому поиск вариантов выполняется при каждом запросе, независимо от того, какое представление используется.
Я думал, что, возможно, сработает выбор вариантов = bodystyle_choices без скобок, но я получаю:
'function' object is not iterable
Очевидно, что я могу использовать кеширование и поместить «import my_forms» только в требуемые функции представления, но это не меняет главное: мой выбор должен быть ленивым!