Django:从视图函数的复选框中提供选择列表

时间:2009-11-16 11:54:09

标签: django django-forms django-views choicefield

在我的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 __()得到一个意外的关键字参数'choices'。我也试图从表单类中删除参数,但我得到了相同的结果。

有没有办法用类似于上面的方式从视图中使用新的选择列表初始化ChoiceField? 在此先感谢:)

2 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:1)

我会向表单类__init__(choices=None)添加FormNumber函数,并使用该函数初始化ChoiceField number,除非它是None
如果未提供choices(默认为None),则初始化将执行默认情况下的操作。