Django Model : 使用自定义验证器和错误消息验证模型数据

2023-04-08 00:00:00 模型 自定义 验证

在Django中,验证器和错误消息都可以通过定义自定义方法来实现。在定义模型时,可以在各个字段上定义自定义验证器方法。这些方法应该以“clean_”开头,并带有一个名为“value”的参数。

下面是一个使用自定义验证器和错误消息验证模型数据的示例:

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

def validate_url(value):
    if not "pidancode.com" in value:
        raise ValidationError(
            f"{value} 不是一个有效的 URL(必须包含 pidancode.com)"
        )

class Article(models.Model):
    title = models.CharField(max_length=200)
    url = models.URLField(validators=[validate_url])

    def clean(self):
        super().clean()
        if "皮蛋编程" not in self.title:
            raise ValidationError(
                {"title": "文章标题必须包含“皮蛋编程”"}
            )

在这个示例中,我们定义了一个名为“validate_url”的自定义验证器方法,它检查URL是否包含“pidancode.com”。我们将其作为URL字段的验证器传递。

我们还定义了一个名为“clean”的自定义方法,它检查文章标题是否包含“皮蛋编程”。如果标题不包含这个字符串,我们将抛出一个包含“title”键和一个错误消息的ValidationError。

在使用这个模型时,如果标题不包含“皮蛋编程”或URL不包含“pidancode.com”,将会显示相应的错误消息。

# 创建一个新的文章对象,但标题中不包含“皮蛋编程”
>>> article = Article(title="Python中的框架", url="http://pidancode.com/")
>>> article.full_clean()
ValidationError({'title': '文章标题必须包含“皮蛋编程”'})

# 创建一个新的文章对象,但URL中不包含“pidancode.com”
>>> article = Article(title="Python中的框架:皮蛋编程", url="http://example.com")
>>> article.full_clean()
ValidationError({'url': ['http://example.com 不是一个有效的 URL(必须包含 pidancode.com)']})

总之,我们可以在Django模型中定义自定义验证器和错误消息来确保数据的完整性和有效性。这样做可以有效地避免数据错误和数据库的脏数据。

相关文章