已经有一段时间了,社区投票的答案已经足够好,基于 Django 内置,但这里有另一种方法,具体问题,遵循 Django Project's documentation。
创建自定义验证器
# app/models.py or create another file for custom validators, i.e. app/custom_validators.py
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _ # use if you support internationalization
def validate_interval(value):
if value < 0.0 or value > 1.0:
raise ValidationError(_('%(value)s must be in the range [0.0, 1.0]'), params={'value': value},)
在模型中使用验证器
# app/models.py
class Foo(models.Model):
myfloat = models.FloatField(validators=[validate_interval])
您甚至可以使验证器参数更通用。
编辑 - 重要
请记住,在表单的 clean() 方法期间会调用任何验证器。
I.E.如果您尝试在不使用表单的情况下直接创建对象,您的验证器将不会被调用。
有些人不推荐它,但如果您想在创建对象时调用验证器,请覆盖 save 方法。
# app/models.py
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _ # use if you support internationalization
class Foo(models.Model):
def save(self, *args, **kwargs):
self.full_clean() # or clean
super().save(*args, **kwargs)
def validate_interval(value):
if value < 0.0 or value > 1.0:
raise ValidationError(_('%(value)s must be in the range [0.0, 1.0]'), params={'value': value},)
myfloat = models.FloatField(validators=[validate_interval])