【发布时间】:2013-11-16 11:14:04
【问题描述】:
只是好奇。何时使用表单验证与模型验证的最佳实践是什么? 根据我目前的理解,表单验证应该用于:
- AJAX / HTTP 请求参数
- 与模型不相关的表单?
另一个问题是:我有一个与模型实例大致相关的 HTML 表单,我要使用 ModelForm 吗?
【问题讨论】:
标签: django django-forms
只是好奇。何时使用表单验证与模型验证的最佳实践是什么? 根据我目前的理解,表单验证应该用于:
另一个问题是:我有一个与模型实例大致相关的 HTML 表单,我要使用 ModelForm 吗?
【问题讨论】:
标签: django django-forms
一定要使用ModelForm,如果你的表单有点像模型对象。
如果有一些细微的差异(例如,您不使用某些字段或者您想使用不同的错误消息等),自定义 ModelForm 然后使用 Form 并实现所有这些功能要容易得多从头开始。
有关ModelForm 的更多参考,请查看 PyDanny 的Core Concepts of Django ModelForms。
【讨论】:
我也在尝试了解表单验证和模型验证之间的区别/关系,我想分享我在阅读了几个文档后形成的笔记。
我目前对Creating Forms from Models感兴趣
@mariodev 分享了文档Core Concepts of Django ModelForms,这是一个良好的开端。
ModelForms 根据模型字段定义选择验证器
幕后的主要故事似乎是DRY 校长。 This article 很好地解释了这里的具体情况。
好吧,这一切都是公平的。问题是“这在 Django 文档中的什么地方进行了解释”?
我碰到了一个非常 brilliant article,上面写着:
django 在验证过程开始时调用 form.full_clean() 方法(通过 form.is_valid(),通常在视图接收到发布的数据后立即)。
如果我错了,请纠正我,但该行显示每次我输入数据并点击“输入”,验证过程就会开始!
好的,现在很简单:
validation on a ModelForm 在我们点击“输入”时开始。
Django 第一个 validates the form,通过逐一检查 Fields、Field Subclasses 上的每个适用验证方法(这是模型字段子类的文档,而不是表单字段子类的文档)、Form Subclasses和ModelForm(因为它是一个ModelForm)。
最后,它验证了Model Instance。
这就是这一切理论上的运作方式。唯一剩下的就是实现它。
【讨论】: