Django 1.11 模型 CharField 的多个验证器
Multiple validators for Django 1.11 Model CharField
有谁知道是否可以将多个验证器应用于 Django 1.11 模型 CharField?我正在尝试强制将该字段格式化为:"Use format XX XXXX XXXX" 或 "Use format XXXX XXX XXX"
prefphone = models.CharField(max_length=255,null=True,blank=True,validators=[RegexValidator(r'^[0-9]{2} [0-9]{4} [0-9]{4}$', "Use format XX XXXX XXXX"),RegexValidator(r'^[0-9]{4} [0-9]{3} [0-9]{3}$', "Use format XXXX XXX XXX")])
第一次验证失败,第二次验证未测试。
如果有其他方法可以实现我的结果,我将不胜感激。谢谢!
这是我对多个验证器的处理方法:
定义自定义验证器函数:
from django.core.exceptions import ValidationError
validator_fn = [
RegexValidator(r'^[0-9]{2} [0-9]{4} [0-9]{4}$', "Use format XX XXXX XXXX"),
RegexValidator(r'^[0-9]{4} [0-9]{3} [0-9]{3}$', "Use format XXXX XXX XXX")
]
def regex_validators(value):
err = None
for validator in validator_fn:
try:
validator(value)
# Valid value, return it
return value
except ValidationError as exc:
err = exc
# Value match nothing, raise error
raise err
现在在现场,只需使用 regex_validators
作为单个验证器:
prefphone = models.CharField(max_length=255,null=True,blank=True,validators=[regex_validators,])
如果您需要完成两个验证
def regex_validators(value):
err = None
cont = 0
for validator in validator_fn:
try:
validator(value)
cont+=1
if cont == 2:
return value
except ValidationError as exc:
err = exc
raise err
有谁知道是否可以将多个验证器应用于 Django 1.11 模型 CharField?我正在尝试强制将该字段格式化为:"Use format XX XXXX XXXX" 或 "Use format XXXX XXX XXX"
prefphone = models.CharField(max_length=255,null=True,blank=True,validators=[RegexValidator(r'^[0-9]{2} [0-9]{4} [0-9]{4}$', "Use format XX XXXX XXXX"),RegexValidator(r'^[0-9]{4} [0-9]{3} [0-9]{3}$', "Use format XXXX XXX XXX")])
第一次验证失败,第二次验证未测试。
如果有其他方法可以实现我的结果,我将不胜感激。谢谢!
这是我对多个验证器的处理方法: 定义自定义验证器函数:
from django.core.exceptions import ValidationError
validator_fn = [
RegexValidator(r'^[0-9]{2} [0-9]{4} [0-9]{4}$', "Use format XX XXXX XXXX"),
RegexValidator(r'^[0-9]{4} [0-9]{3} [0-9]{3}$', "Use format XXXX XXX XXX")
]
def regex_validators(value):
err = None
for validator in validator_fn:
try:
validator(value)
# Valid value, return it
return value
except ValidationError as exc:
err = exc
# Value match nothing, raise error
raise err
现在在现场,只需使用 regex_validators
作为单个验证器:
prefphone = models.CharField(max_length=255,null=True,blank=True,validators=[regex_validators,])
如果您需要完成两个验证
def regex_validators(value):
err = None
cont = 0
for validator in validator_fn:
try:
validator(value)
cont+=1
if cont == 2:
return value
except ValidationError as exc:
err = exc
raise err