如何解决is_valid始终为FalseDjango
| 我具有动态字段的以下形式: 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)在views.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))
在1号情况下,我能够在for循环中显示动态字段。但是,填写所有字段并提交(POST)后,该表单将我抛出此错误:
int()参数必须是字符串或数字,而不是\'QueryDict \'。我以为是导致错误的request.POST。
在对此问题进行了一些研究之后,有类似的解决方案:
http://groups.google.com/group/django-users/browse_thread/thread/ddefd76324ffe6cd
http://groups.google.com/group/django-users/browse_thread/thread/495a917396b20b37/c430d71a31204e5d#c430d71a31204e5d
2)在models.py中
class InsertValuesForm(forms.Form):
def __init__(self,**kwargs):
idfield = kwargs.pop(\'idfield\',False)
super(InsertValuesForm,**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相同)
def something(request)
#......
idfield = request.GET.get(\'feid\',context_instance=RequestContext(request))
现在,上面的代码甚至不显示动态文本框,而仅显示为空白页。欣赏是否有人可以阐明
如何同时显示这些动态文本框,
通过request.POST获取这些文本框的值,并使表单生效。谢谢
解决方法
您已经更改了表单的ѭ4the的签名,因此第一个位置参数是
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。