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