_是否有效始终为False(Django)
我有以下带有动态字段的表单: 1) 在models.py中,我想向要查询的表单传递一个值_是否有效始终为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(
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)