2009-11-16 2 views
1

в моем приложении Django У меня есть форма с ChoiceField, которая обычно позволяет выбирать между диапазоном целочисленных значений.Django: предоставить список выбора флажку из функции просмотра

class FormNumber(forms.Form): 
list=[] 
for i in range(1, 11): 
    list.append((i,i)) 
number=forms.ChoiceField(choices=list, initial=1) 

Теперь мне нужно переопределить список по Choices умолчанию из метода представления в некоторых случаях, используя меньший диапазон, но при попытке сделать это таким образом

n=10-len(request.session["items"]) 
    if n>0: 
     list=[] 
     for i in range(1, n+1): 
      list.append((i,i)) 
     form=FormNumber(choices={'number':list}, initial={'number':1}) 

я получаю TypeError - __ init __() получил неожиданный аргумент ключевого слова «выборы». Я также попытался удалить параметры из класса формы, но получаю тот же результат.

Есть ли способ инициализировать ChoiceField с новым списком выбора из представления способом, аналогичным приведенному выше? Заранее спасибо :)

ответ

1

Я хотел бы добавить __init__(choices=None) функцию в виде класса FormNumber и инициализировать ChoiceField number используя, что если это не None.
Если choices не предоставляется (по умолчанию None), инициализация будет делать то, что он делает по умолчанию.

+0

Спасибо за ваш ответ, я пытаюсь решить таким образом, давайте посмотреть, что будет – Alex

+0

Это сработало, спасибо снова Никласу! – Alex

2

Я размещаю код, возможно, кто-то в будущем должен решить аналогичную проблему.

Форма кода теперь это одна:

class FormNumber(forms.Form): 
    def __init__(self, list=None, *args, **kwargs): 
     super(FormNumber, self).__init__(*args, **kwargs) 
     self.fields["number"]=forms.ChoiceField(choices=list) 

и я называю это с точки зрения просто с

form=FormNumber(list=number_list)