好奇。何时使用表单与模型验证的最佳实践是什么? 根据我目前的理解,表单验证应该用于:
另一个问题是:我有一个大致与模型实例相关的HTML表单,我是否使用了ModelForm?
答案 0 :(得分:1)
绝对使用ModelForm
,如果您的表单即使只是一小部分也类似于模型对象。
如果存在一些细微差别(例如,您没有使用某些字段,或者您想使用不同的错误消息等),那么自定义ModelForm
然后使用起来要容易得多Form
并从头开始实现所有这些功能。
有关ModelForm
的更多参考,请查看PyDanny的Core Concepts of Django ModelForms。
答案 1 :(得分:0)
我也试图了解表单和模型验证之间的区别/关系,我想分享我在阅读几个文档后形成的注释。
我目前对Creating Forms from Models
感兴趣@mariodev共享了文档Core Concepts of Django ModelForms,这提供了一个良好的开端。
ModelForms根据模型字段定义选择验证器
幕后的主要故事似乎是DRY校长。 This article非常清楚地解释了这里的具体情况。
好的,这一切都是公平的。问题是“Django文档在哪里解释了这个”?
我碰到了一个非常brilliant article的地方,声明:
form.full_clean()方法在验证过程开始时由django调用(通过form.is_valid(),通常在视图收到发布数据后立即)。
如果我错了,请纠正我,但是每次输入数据并点击“输入”时该行都会显示验证过程开始!
好的,现在很简单:
当我们点击“输入”时,validation on a ModelForm开始了。
Django首先validates the form逐一检查Fields,Field Subclasses上的每个适用验证方法(这是模型的字段子类的文档,而不是表单字段的文档子类),Form Subclasses和ModelForm(因为它是一个ModelForm)。
最后,它会验证Model Instance。
理论上这就是所有这些。唯一剩下的就是实现它。