最近我发现可以直接在models.py文件中定义Django表单验证。这可以通过以下方式完成:
fev1_liter = models.DecimalField(validators=[MaxValueValidator(8.2),
MinValueValidator(0.3)],
max_digits=3, decimal_places=2)
这是 forms.py 中验证的绝佳替代方案,但我确实遇到了一个非常烦人的问题: 我如何控制执行验证的顺序? 在此示例中,Django 将首先验证输入数字是否采用 x.xx 格式,然后验证最小值和最大值。这会导致一些非常困惑的错误消息。 提前致谢!
最佳答案
对于每个模型字段,field.clean()
首先通过field.validate()
执行字段验证,然后通过field.run_validators()
,验证器被调用,以便它们从 field.validators
迭代器返回。
这是有道理的,因为在一般情况下,如果字段验证失败,您可以预期您的验证器会失败,因此它更容易调试。请记住,字段验证器不是强制性的,因此 field.validate()
优先。如果您想更改行为,您必须创建自己的 Field
类并覆盖 field.clean()
行为。
您可以检查 field sources了解更多详情。
关于Django:模型中的验证顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224004/