Django: предоставить список вариантов для флажка из функции просмотра

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

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

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

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 с новым списком вариантов из представления способом, аналогичным приведенному выше? Заранее спасибо :)


person Alex    schedule 16.11.2009    source источник


Ответы (2)


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

person Niklas    schedule 16.11.2009
comment
Спасибо за ответ, пытаюсь решить таким образом, посмотрим что получится - person Alex; 16.11.2009

Выкладываю код, может кому в будущем понадобится решить подобную проблему.

Теперь код формы такой:

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) 
person Alex    schedule 17.11.2009