Django Model Validation with Custom Validators: 使用自定义验证器验证模型数据
在Django中,我们可以使用自定义验证器来验证模型数据。
自定义验证器是一个简单的Python函数,它接收一个值作为参数并返回一个错误消息,如果该值无效,则该错误消息将与其他验证器一起显示。
下面是一个例子:
from django.core.exceptions import ValidationError def validate_pidancode(value): if "pidancode" in value.lower(): raise ValidationError("不能包含pidancode.")
在这里,我们定义了一个名为validate_pidancode的自定义验证器。它检查传递的值是否包含pidancode字符串,并抛出一个ValidationError异常,如果它存在,则该异常包含自定的错误消息。
要将这个自定义验证器应用到模型中,我们可以在模型字段定义的validators参数中指定它:
from django.db import models class MyModel(models.Model): my_field = models.CharField(max_length=50, validators=[validate_pidancode])
这里,我们将validate_pidancode函数添加到my_field的validators列表中。模型中的my_field现在将自动验证不包含pidancode字符串。
现在,让我们来看看一个更完整的例子,来展示更多关于自定义验证器的使用方式:
from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import gettext_lazy as _ def validate_pidancode(value): if "pidancode" in value.lower(): raise ValidationError(_("不能包含pidancode.")) def validate_pidegg(value): if "pidegg" in value.lower(): raise ValidationError(_("不能包含pidegg.")) class MyModel(models.Model): name = models.CharField(max_length=50, validators=[validate_pidancode, validate_pidegg]) age = models.IntegerField() def clean(self): super().clean() if self.age < 18: raise ValidationError(_("年龄必须大于等于18岁.")) def save(self, *args, **kwargs): self.full_clean() super().save(*args, **kwargs)
在这里,我们定义了两个自定义验证器validate_pidancode和validate_pidegg,并将它们应用于MyModel中的name字段。
我们还重写了MyModel的clean方法,这个方法将在保存之前对对象进行完整的数据验证。在这个方法中,我们添加一个简单的验证规则,以确保年龄大于等于18岁。
最后,我们重写了MyModel的save方法,以确保在保存之前调用clean方法进行数据验证。
使用这里提供的自定义验证器,我们可以更加容易地验证模型数据,以确保它们满足特定的条件。
相关文章