有谁知道是否可以将多个验证器应用于Django 1.11 Model CharField?我正在尝试将字段格式化为:"使用格式XX XXXX XXXX"或"使用格式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")])
第一次验证失败,第二次验证未经过测试。
如果有其他方法可以实现我的结果,我将很高兴听到他们的意见。谢谢!
答案 0 :(得分:1)
这是我接近多个验证器: 定义自定义验证器功能:
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,])
答案 1 :(得分:1)
如果您需要完成两项验证
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