_是否有效始终为False(Django)

_是否有效始终为False(Django),django,Django,我有以下带有动态字段的表单: 1) 在models.py中,我想向要查询的表单传递一个值 class InsertValuesForm(forms.Form): def __init__(self, idfield, *args, **kwargs): super(InsertValuesForm, self).__init__(*args, **kwargs) for f in Parameter.objects.filter(

我有以下带有动态字段的表单:

1) 在models.py中,我想向要查询的表单传递一个值

class InsertValuesForm(forms.Form):
    def __init__(self, idfield, *args, **kwargs):           

        super(InsertValuesForm, self).__init__(*args, **kwargs)

        for f in Parameter.objects.filter(id=idfield):          

            if Part.objects.get(parameter=f.parameter_name).isfunction:
                self.fields.update({
                            f.parameter_name) : forms.CharField(widget=forms.TextInput() )})
1) 在视图中.py

def something(request)
#......
                idfield = request.GET.get('feid','0')

                form = InsertValuesForm(request.POST,idfield)

                if request.method == 'POST':

                    if form.is_valid():

                       #some code

                else:

                    form = InsertValuesForm(idfield)

                return render_to_response('fuzz/configuration.html', {
                'form': form,
            },context_instance=RequestContext(request))
在第一种情况下,我能够在for循环中显示动态字段。但是,在填写所有字段并提交(POST)后,表单向我抛出了此错误:

int()参数必须是字符串或数字,而不是“QueryDict”。我想是request.POST导致了这个错误。 在对这个问题进行了一些研究之后,出现了类似的解决方案:

 def __init__(self, *args, **kwargs):
      idfield = kwargs.pop('idfield', None)
      ...etc...

2) 在模型中.py

class InsertValuesForm(forms.Form):
    def __init__(self, *args, **kwargs):

        idfield = kwargs.pop('idfield', False)

        super(InsertValuesForm, self).__init__(*args, **kwargs)

        for f in Parameter.objects.filter(id=idfield):          

            if Part.objects.get(parameter=f.parameter_name).isfunction:
                self.fields.update({
                            f.parameter_name) : forms.CharField(widget=forms.TextInput() )})

下面是views.py的片段(与数字1相同)

现在,上面的代码甚至不显示动态文本框,只显示为空白页。如果有人能解释一下,我将不胜感激

如何显示这些动态文本框,同时,
通过request.POST获取这些文本框的值,并使表单生效。谢谢

您已经更改了表单的
\uuuu init\uuuu
的签名,因此第一个位置参数是
idfield
。不要这样做,因为现在当您使用
form=InsertValuesForm(request.POST,idfield)
实例化它时,它将第一个参数设置为
idfield
,而不是
request.POST

相反,请按如下方式定义方法:

 def __init__(self, *args, **kwargs):
      idfield = kwargs.pop('idfield', None)
      ...etc...
并使用关键字arg对其进行实例化:

form = InsertValuesForm(request.POST, idfield=idfield)