Формы Django +: динамический выбор для ChoiceField
Я пытаюсь создать динамический список вариантов для ChoiceField, но я не могу вызвать запрос. Вот код:
Ошибки:
AttributeError: 'CreationForm' object has no attribute 'request'
формы
class FooForm(forms.Form):
def __init__(self, *args, **kwargs):
super(FooForm, self).__init__(*args, **kwargs)
bars = self.request.session['bars']
foo_list = []
for bar in bars:
foo_list.append((bar['id'], bar['name']),)
self.fields['foo'].choices = foo_list
foo = forms.ChoiceField(choices=foo_list, required=True)
2 ответов
почему бы не передать варианты из представления при создании экземпляра формы?
например
форма:
class FooForm(forms.Form):
def __init__(self, foo_choices, *args, **kwargs):
super(FooForm, self).__init__(*args, **kwargs)
self.fields['foo'].choices = foo_choices
foo = forms.ChoiceField(choices=(), required=True)
вид:
...
bars = request.session['bars']
foo_list = []
for bar in bars:
foo_list.append((bar['id'], bar['name']),)
form = FooForm(foo_list)
...
чтобы получить дело с проверкой на is_valid()
действий, я думаю, что это будет работать
class FooForm(forms.Form):
def __init__(self, foo_choices, *args, **kwargs):
self.base_fields['foo'].choices = foo_choices
super(FooForm, self).__init__(*args, **kwargs)
foo = forms.ChoiceField(choices=(), required=True)
код выше непроверен