有相当精确的 文档中关于Django Form validation (如Django的1.10) 和我已经用它已经成功, 那么什么是我的问题吗?Django表单验证如何工作?
我的问题是记住这个东西。
该框架包括冗余,不规则,一些不常见的名字, 当然还有很多幕后的的自动机制 ,我似乎不能够保持它在我的头上。
有人可以帮忙的描述是 比原始文档更快的扫描?
有相当精确的 文档中关于Django Form validation (如Django的1.10) 和我已经用它已经成功, 那么什么是我的问题吗?Django表单验证如何工作?
我的问题是记住这个东西。
该框架包括冗余,不规则,一些不常见的名字, 当然还有很多幕后的的自动机制 ,我似乎不能够保持它在我的头上。
有人可以帮忙的描述是 比原始文档更快的扫描?
假设你有一个FormMyForm
类称为myform
和含有各种Fields一个实例,特别是 SomeField
场称为somefield
这是我们作为一个例子用来理解 是怎么回事。 SomeField
可以来自Django或您自己的代码。
Form
验证过程这些是Django的是要 所述验证步骤执行或尝试:
SomeField.to_python(self, value)
myform
value
到它的Python目标类型(例如int
)value
value
裹挟到适当的Python类型为SomeField
ValidationError
SomeField.validate(self, value)
myform
value
ValidationError
SomeField.run_validators(self, value)
myform
myform.somefield
value
ValidationError
将来自验证器的所有ValidationError
合并为一个SomeField.clean(self, value)
myform
to_python
,validate
,和run_validators
value
to_python
ValidationError
:不重写Django会被插入的返回值到myform.cleaned_data
MyForm.clean_somefield(self)
myform
每场的这种方法somefield
本地self.cleaned_data
somefield
的新值或未更改值myform.cleaned_data
ValidationError
Field.clean
电话。MyForm.clean(self)
myform
一次self.cleaned_data
cleaned_data
myform.cleaned_data
self.add_error
或提高ValidationError
。 后者将在myform.non_field_errors()
结束。cleaned_data
的时候,因为这没有 验证将丢失的字段。ModelForm
用于ModelForms
验证已多一个步骤中加入底:
myform.instance.full_clean()
: 调用验证在相应的模型实例(如果有的话)。而一个ModelForm's
clean
方法也将通过这个instance
属性 访问模型实例。
为了使就像你想myform
验证,因此你有 不同的可能性:
SomeField
一流水平,您可以覆盖 SomeField.to_python
或SomeField.validate
(例如由子类)MyForm
一流水平, 字段级的验证可以实现MyForm.clean_somefield
或 刚刚注册验证: somefield = SomeField(validators=[somevalidator])
。
django.core.validators
或自定义的验证器。self
作为第一个参数。MyForm.clean
。此验证过程可以以多种方式被触发:
myform.full_clean()
myform.is_valid()
myform.errors
等