在Django/Python中,当您创建一个自定义表单时,它是否需要有一个clean()方法,还是将调用.u valid()执行默认验证?在
if request.method == 'POST':
filter = FilterForm(request.POST)
if filter.is_valid():
print 'Month is ' + filter.cleaned_data['month']
print 'Type is ' + filter.cleaned_data['type']
print 'Number is ' +filter.cleaned_data['number']
else:
print 'Invalid form'
print filter.errors
“无效表单”将被打印,但不会打印错误。在
^{pr2}$我试过了,有没有干净的方法。在
如果没有特定的
clean
方法,Django仍将验证表单中的所有字段,以确保所有必需字段都存在,在必要时它们具有正确的类型,并且具有选项的字段具有与其中一个选项对应的值。在此表单有几个问题可能会导致您的问题。首先,重写了
__init__
,这样self
后面的第一个参数是numbers
。但是,当您实例化表单时,您不传递这个参数-您只需传递request.POST
。在第二,像在
__init__
中那样动态地向self.fields
添加字段是个坏主意。相反,用一个空的choices
列表声明您的number
字段,并在__init__
中设置它:不,完全可以选择。在
当Django验证表单时,有一个大列表,其中列出了按特定顺序执行的操作。您可以在此处了解该过程:
http://docs.djangoproject.com/en/dev/ref/forms/validation/
至于找到问题,如果您在模板上粘贴
{{form.errors}}
,您将看到哪个字段正在爆炸。我有一种感觉,你的选择可能是在某个地方定义的,当它需要的时候(把它们从类中移出)无法处理。在编辑:差点错过这个。看看这条线:
再看看这条线:
^{pr2}$此时还需要传递
numbers
参数。这是一个全新的例子。它无法验证,因为它不知道numbers
是什么。在相关问题 更多 >
编程相关推荐