model的clean()方法和form的clean()方法之间有什么关系吗?

Jun*_*une 5 python django

我已经覆盖了clean()一些模型的方法来构造约束以满足我的数据库模式要求(因为它需要运行时信息来进行这些验证)。

现在我已经完成了大部分后端组件(模型信号、..),现在我正在尝试为我的模型编写ModelForms 。

我想知道的是,clean()模型的方法和clean()表单侧的实现之间有什么关系吗?

如果是这样,并且表单clean()调用模型,clean()我将不必重写我的模型端clean()实现,并且能够避免代码冗余。

Yuj*_*ita 3

是的,ModelForm清洁涉及模型清洁。这就是 a 的想法ModelForm:有很多有用的默认值可以通过从模型自动构建表单对象来确定。

我通过个人经验发现了这种干净的链接,但为了支持它,我可以参考来源。

在 1.8 上,ModelForm调用模型实例full_clean方法。在 1.7 上,它clean直接调用该方法。

Form.full_clean()

def full_clean(self):
    # ..... snip
    self._clean_fields()
    self._clean_form()
    self._post_clean()
Run Code Online (Sandbox Code Playgroud)

ModelForm._post_clean 1.8

其他验证中的模型full_clean()调用: https://docs.djangoproject.com/en/1.8/ref/models/instances/clean()

self.instance.full_clean(exclude=exclude, validate_unique=False)
Run Code Online (Sandbox Code Playgroud)

ModelForm._post_clean 1.7

self.instance.clean()
Run Code Online (Sandbox Code Playgroud)