首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么django的model.save()不调用full_clean()?

为什么django的model.save()不调用full_clean()?
EN

Stack Overflow用户
提问于 2010-12-15 00:32:36
回答 7查看 33.9K关注 0票数 170

我只是好奇有没有人知道为什么django的orm没有调用“full”

_

在模型上进行清理,除非将其保存为模型表单的一部分。

请注意,完整的

_

当您调用模型的save()方法时,clean()不会自动调用。当您想要为自己手动创建的模型运行一步模型验证时,您需要手动调用它。

django的完整干净文档

(注: Django 1.6更新了报价...以前的django文档也有关于ModelForms的警告。)

为什么人们不想要这种行为,有什么很好的理由吗?我认为,如果您花时间将验证添加到模型中,您会希望每次保存模型时都运行验证。

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-15 00:47:58

AFAIK,这是因为向后兼容。ModelForms中排除的字段、具有默认值的模型、pre等也存在问题

_

save()信号等。

您可能感兴趣的来源:

http://code.djangoproject.com/ticket/13100

http://groups.google.com/group/django-developers/browse

_

frm/thread/b888734b05878f87

票数 64
EN

Stack Overflow用户

发布于 2015-09-07 13:56:39

由于兼容性的考虑,在django内核中没有启用保存时自动清除。

如果我们正在启动一个新项目,并且想要缺省的

模型上的方法可以自动清理,我们可以在保存每个模型之前使用以下信号进行清理。

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()
票数 33
EN

Stack Overflow用户

发布于 2016-08-12 17:57:44

调用

方法只是重写

方法:

class YourModel(models.Model):
    ...  
    
    def save(self, *args, **kwargs):
        self.full_clean()
        return super(YourModel, self).save(*args, **kwargs)
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4441539

复制
相关文章

相似问题

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