首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django 1.5中优雅地保存数据之前使用full_clean()进行数据验证?

如何在Django 1.5中优雅地保存数据之前使用full_clean()进行数据验证?
EN

Stack Overflow用户
提问于 2014-03-23 04:18:00
回答 1查看 18.7K关注 0票数 17

我认为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中是否有什么好的想法来优雅地实现这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2014-05-15 16:40:10

尽管在模型级别上执行验证的想法似乎是正确的,但是Django由于各种原因在默认情况下并不这样做。除了一些向后兼容的问题外,作者可能不想支持这一点,因为他们担心这会造成一种错误的安全感,而事实上,您的数据并不一定会被验证。一些ORM方法(例如bulk_createupdate)不调用save(),因此无法验证您的模型。换句话说,很难保证验证,因此他们决定不假装验证。

如果多个模型需要这一点,您可以创建一个简单的mixin,它覆盖save()方法并在super之前调用full_clean()。请注意,这可能会导致验证在某些情况下运行两次,比如在使用ModelForm时。不过,如果您的验证例程是免费的,而且运行成本低廉,这可能不是问题。

欲了解更多信息,请参见以下答案:

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22587019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档