我可以在模型上设置最小值验证器:
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?
答案 0 :(得分:1)
验证器与保存模型没有任何关系 - 除了在保存之前应该检查它们。
请注意,保存模型时不会自动运行验证程序,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证程序。
确保您严格遵守允许创建对象的方式,或者您可能需要覆盖保存或提供pre_save signal