我认为Django的模型验证对于那些不使用内置ModelForm的模型来说有点不方便,尽管不知道为什么。
首先,需要手动调用full_clean()。
请注意,在调用模型的save()方法时,不会自动调用full_clean(),也不会因为ModelForm validation.In而调用ModelForm验证的情况,Model.clean_fields()、Model.clean()和Model.validate_unique()都是单独调用的,当您想要为自己手工创建的模型运行一步模型验证时,需要手动调用full_clean。
其次,将validators应用于内置ModelForm中.
注意,当您保存模型时,验证器不会自动运行,但是如果您使用的是ModelForm,它将在表单中包含的任何字段上运行您的验证器。
当您需要在将数据保存到数据库之前进行数据验证时,会有很大的需求。显然,我更喜欢做模型,而不是视图。那么,在Django 1.5中是否有什么好的想法来优雅地实现这一点呢?
发布于 2014-05-15 16:40:10
尽管在模型级别上执行验证的想法似乎是正确的,但是Django由于各种原因在默认情况下并不这样做。除了一些向后兼容的问题外,作者可能不想支持这一点,因为他们担心这会造成一种错误的安全感,而事实上,您的数据并不一定会被验证。一些ORM方法(例如bulk_create或update)不调用save(),因此无法验证您的模型。换句话说,很难保证验证,因此他们决定不假装验证。
如果多个模型需要这一点,您可以创建一个简单的mixin,它覆盖save()方法并在super之前调用full_clean()。请注意,这可能会导致验证在某些情况下运行两次,比如在使用ModelForm时。不过,如果您的验证例程是免费的,而且运行成本低廉,这可能不是问题。
欲了解更多信息,请参见以下答案:
https://stackoverflow.com/questions/22587019
复制相似问题