python - 模型 clean() 方法和表单 clean() 方法之间有什么关系吗?

标签 python django

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

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

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

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

最佳答案

是的,ModelForm清理涉及模型清理。这就是 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()

1.8 的 ModelForm._post_clean

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

self.instance.full_clean(exclude=exclude, validate_unique=False)

1.7 的 ModelForm._post_clean

self.instance.clean()

关于python - 模型 clean() 方法和表单 clean() 方法之间有什么关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29908157/

相关文章:

django - 如何在 Django 中存储第三方应用程序迁移

python - pandas回填并填充不同的值

python - 关闭作为对象 {str} 打开的文件

Django Cookie 前缀以通过 securityheaders.com

python - SUDS 或 SOAPpy : google app engine python

python - Tornado websockets : share open web sockets between processes

python - 数据作为数据帧附加在内存中

python - key "arrow down"的 ASCII 代码在具有 selenium2library 的机器人中使用

python - 迁移时 Django MySQL 错误

python - 图像字段模型形式的 Django 自定义验证(最大文件大小等)