gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:44:04 34 4
gpt4 key购买 nike

我觉得Django的模型验证对于那些没有使用内置ModelForm的模型来说有点不方便,虽然不知道为什么。

首先,需要手动调用full_clean()

Note that full_clean() will not be called automatically when you call your model’s save() method, nor as a result of ModelForm validation.In the case of ModelForm validation, Model.clean_fields(), Model.clean(), and Model.validate_unique() are all called individually.You’ll need to call full_clean manually when you want to run one-step model validation for your own manually created models.

其次,验证器用于内置的ModelForm

Note that validators will not be run automatically when you save a model, but if you are using a ModelForm, it will run your validators on any fields that are included in your form.

当您需要在将数据保存到数据库之前进行数据验证时,会有很大的需求。显然我更愿意在模型中制作它,而不是在 View 中制作。那么,有什么好的想法可以在 Django 1.5 中优雅地实现它吗?

最佳答案

尽管在模型级别强制执行验证的想法似乎是正确的,但由于各种原因,Django 并没有默认执行此操作。除了一些向后兼容性问题,作者可能不想支持这一点,因为他们担心这会产生一种虚假的安全感,而实际上您的数据并不能保证始终得到验证。某些 ORM 方法(例如 bulk_createupdate)不调用 save(),因此无法验证您的模型。换句话说,很难保证验证,因此他们决定不假装。

如果您需要为多个模型使用它,您可以创建一个简单的 mixin 来覆盖 save() 方法并在 super full_clean()。请注意,在某些情况下,这可能会导致验证运行两次,例如使用 ModelForm 时。不过,如果您的验证例程没有副作用且运行成本低,那么这可能不是问题。

有关详细信息,请参阅以下答案:

关于python - 如何在优雅地保存在 Django 1.5 之前使用 full_clean() 进行数据验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22587019/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com