У меня есть 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, поэтому поиск вариантов выполняется по каждому запросу, независимо от того, какое представление используется.
I thought that maybe putting choices=bodystyle_choices with no bracket would work, but I get:
'function' object is not iterable
Очевидно, я могу использовать кеширование и поместить «import my_forms» только в требуемые функции просмотра, но это не меняет сути: мой выбор должен быть ленивым!