Django自定义表单验证

2024-05-14 11:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

在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}$

我试过了,有没有干净的方法。在


Tags: django方法clean表单dataifisrequest
2条回答

如果没有特定的clean方法,Django仍将验证表单中的所有字段,以确保所有必需字段都存在,在必要时它们具有正确的类型,并且具有选项的字段具有与其中一个选项对应的值。在

此表单有几个问题可能会导致您的问题。首先,重写了__init__,这样self后面的第一个参数是numbers。但是,当您实例化表单时,您不传递这个参数-您只需传递request.POST。在

第二,像在__init__中那样动态地向self.fields添加字段是个坏主意。相反,用一个空的choices列表声明您的number字段,并在__init__中设置它:

self.fields['number'].choices = numbers

does it need to have a clean() method

不,完全可以选择。在

当Django验证表单时,有一个大列表,其中列出了按特定顺序执行的操作。您可以在此处了解该过程:

http://docs.djangoproject.com/en/dev/ref/forms/validation/

至于找到问题,如果您在模板上粘贴{{form.errors}},您将看到哪个字段正在爆炸。我有一种感觉,你的选择可能是在某个地方定义的,当它需要的时候(把它们从类中移出)无法处理。在

编辑:差点错过这个。看看这条线:

def __init__(self,numbers,*args, **kwargs)

再看看这条线:

^{pr2}$

此时还需要传递numbers参数。这是一个全新的例子。它无法验证,因为它不知道numbers是什么。在

相关问题 更多 >

    热门问题