Django Model : 使用自定义验证器和错误消息验证模型数据
在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模型中定义自定义验证器和错误消息来确保数据的完整性和有效性。这样做可以有效地避免数据错误和数据库的脏数据。
相关文章