1

在我的 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?提前致谢 :)

4

2 回答 2

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) 
于 2009-11-17T09:10:10.607 回答
1

我会__init__(choices=None)在表单类中添加一个函数FormNumber并使用它初始化 ChoiceField number,除非它是None.
如果choices未提供(默认为None),初始化将执行默认操作。

于 2009-11-16T12:11:20.550 回答