【发布时间】:2010-11-09 16:29:00
【问题描述】:
我使用 django,我想知道应该在什么情况下进行模型验证。至少有两种变体:
- 在模型的保存方法中进行验证,如果违反业务规则则引发 IntegrityError 或其他异常
- 使用表单和内置 clean_* 工具验证数据
从一个角度来看,答案是显而易见的:应该使用基于表单的验证。这是因为 ORM 是 ORM,而验证完全是另一个概念。看一下 CharField:forms.CharField 允许指定 min_length,但 models.CharField 不允许。 好的很酷,但是 django.db.models 中的所有验证功能到底在做什么?我可以指定 CharField 不能为空,我可以使用在此处执行的 EmailField、FileField、SlugField 验证,在 python 中,而不是在 RDBMS 上。此外,还有一个 URLField 可以检查 url 的 存在性,这涉及到一些非常复杂的逻辑。
另一方面,如果我有一个实体,我想保证它不会以不一致的状态保存,无论它来自表单还是由某些内部算法修改/创建。我有一个带有名称字段的模型,我希望它应该比一个字符长。我也有一个 min_age 和一个 max_age 字段,如果 min_age > max_age 没有多大意义。那么我应该在保存方法中检查这些条件吗?
模型验证的最佳实践是什么?
【问题讨论】:
标签: python django validation architecture django-models