https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run
有关验证器如何在表单中运行的更多信息,请参阅表单验证,以及验证对象以了解它们如何在模型中运行。请注意,保存模型时验证器不会自动运行,但如果您使用 ModelForm,它将在表单中包含的任何字段上运行验证器。有关模型验证如何与表单交互的信息,请参阅 ModelForm 文档。
您可以重写 save() 方法并对模型实例执行 full_clean() ,如此处文档中所述:https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run
或者仅对 GenericIPAddressField 使用验证器:
from django.core.validators import ip_address_validators
from django.core.exceptions import ValidationError
def save(self, *args, **kwargs):
try:
ip_address_validators('ipv4', self.ip_address)
except ValidationError:
return
super(AccessPointIPAddress, self).save(*args, **kwargs)
它将使用以下验证器:
ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
validate_ipv4_address = RegexValidator(ipv4_re, _('Enter a valid IPv4 address.'), 'invalid')