为什么Django的模型.Save()不调用Full_CLEAY()?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我只是好奇是否有人知道为什么Django的orm不叫“满”_在模型上清除‘,除非它被保存为模型表单的一部分。

请注意,全部_在调用模型的Save()方法时,CLEAN()不会被自动调用。当想要自己手工创建的模型运行一步模型验证时,需要手动调用它。

(注意:为Django 1.6更新的引号...以前的Django文档也有关于ModelForms的警告。)

人们为什么不想这样做,有充分的理由吗?我认为,如果花时间向模型添加验证,那么每次保存模型时,都会希望验证运行。

我知道如何让一切正常工作,我只是想找个解释。

提问于
用户回答回答于

AFAIK,这是因为向后兼容。也存在一些问题,比如有排除字段的ModelForms,带有默认值的模型,Pre_保存()信号等

用户回答回答于

由于兼容性考虑,Django内核中没有启用自动清理保存。

如果我们正在启动一个新项目,并且希望默认设置save方法对模型进行自动清洗,在每个模型保存之前,可以利用以下信号进行清洗。

from django.dispatch import receiver
from django.db.models.signals import pre_save, post_save

@receiver(pre_save)
def pre_save_handler(sender, instance, *args, **kwargs):
    instance.full_clean()

扫码关注云+社区