Django 中 clean 和 full_clean 函数的主要区别是什么?

问题描述 投票:0回答:3

Django 模型中 clean 和 full_clean 函数的主要区别是什么?

python python-3.x django django-models django-forms
3个回答
15
投票

来自文档

Model.full_clean(排除=无,validate_unique=True

此方法调用

Model.clean_fields()
Model.clean()
Model.validate_unique()
(如果
validate_unique
True
),按顺序 并引发一个具有
ValidationError
属性的
message_dict
包含所有三个阶段的错误。

Model.clean():

此方法应用于提供自定义模型验证,并 如果需要,可以修改模型的属性。

有关更详细的说明,请查看文档的验证对象部分。


2
投票

他们并不互相反对。通常您调用 Model.full_clean(),它会调用 Model.clean() 进行自定义验证。 例如:

from django.core.exceptions import ValidationError
from django.db import models


class Brand(models.Model):
    title = models.CharField(max_length=512)

    def clean(self):
        if self.title.isdigit():
            raise ValidationError("title must be meaningful not only digits")

    def save(self, *args, **kwargs):
        self.full_clean()
        return super().save(*args, **kwargs)

1
投票

以下是验证模型涉及的三个步骤:

验证模型字段 -

Model.clean_fields()

验证整个模型 -

Model.clean()

验证字段唯一性 -

Model.validate_unique()

当您调用模型的

full_clean()
方法时,将执行所有三个步骤。了解更多信息点击这里

© www.soinside.com 2019 - 2024. All rights reserved.