时间:2016-12-06 14:15:07

标签: django validation django-models django-forms

我可以在模型上设置最小值验证器:

class MyModel(Model):
    my_field = models.fields.IntegerField(default=250, validators=[MinValueValidator(30)])

然后我使用之前的模型创建一个表单:

class MyForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ('my_field',)

表单得到验证,显示正确的错误消息(当输入的值大于< 30时),但即使输入了错误的值,它也会保存在实例上!

我能够通过指定(再次)表单上的最小值来使其工作:

class MyForm(ModelForm):
    my_field = form.IntegerField(min_value=30)

    class Meta:
        model = MyModel
        fields = ('my_field',)

但这样代码不干 - 我需要指定值和字段类型两次。

有什么方法可以避免这种情况吗?或者至少从模型验证器中获取min_value?

1 个答案:

答案 0 :(得分:1)

验证器与保存模型没有任何关系 - 除了在保存之前应该检查它们。

docs

  

请注意,保存模型时不会自动运行验证程序,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证程序。

确保您严格遵守允许创建对象的方式,或者您可能需要覆盖保存或提供pre_save signal