Django表单字段如:forms.CharField, forms.EmailField等,会默认传入参数required=True
,也就是默认表单字段不能为空,如果对html5新特性不了解,会以为这仅仅是控制相应表单不能为空。
然后会碰到一个很奇怪的现象,我明明没有在模板中导入任何JavaScript,但是当我未在此字段填入任何内容而提交表单时,相应表单字段框会弹出一个“精致”的响应框”此字段不能为空“。实际上这就是h5新特性required导致的,<input>
标签会自动带有required。
有时候这个默认样式就很碍事,我想要自定义js效果,因此就在表单字段内显式定义required=False
就行了。
可是这样就会使表单判空机制失效,于是需要自定义表单验证
:
在表单类里面重写clean_[fieldname]()
方法,fieldname就是各个表单字段名,并且一定要记住,如果只验证了一个字段,最后return self.cleaned_data[[fieldname]]
,如果对多个关联字段进行了验证,最后return self.cleaned_data
。这些表单验证会在视图函数调用form.is_valid()
时隐式触发。你也可以在将自定义验证内容覆盖重写在clean()
里,注意一定要调用父类的 clean() 方法。
然后就可以在模板内通过form.errors
进行错误信息渲染,它默认带有class='errorlist'
的css样式,你也可以自定义。
关于表单验证的详细细节可以仔细阅读官方文档:
https://docs.djangoproject.com/zh-hans/3.0/ref/forms/validation/