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