Django: предоставить список выбора для флажка из функции просмотра - PullRequest
1 голос
/ 16 ноября 2009

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

Ответы [ 2 ]

2 голосов
/ 17 ноября 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) 
1 голос
/ 16 ноября 2009

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

...