在Django中对RegexValidator进行子类化不起作用

时间:2015-07-25 10:46:18

标签: django python-3.x django-validation

为了干和简单,我想继承Django's RegexValidator

我试过了:

class UsernameValidator(RegexValidator):
    regex = r'^([a-zA-Z]{4}[\w]{1,16})$'
    message = 'Wrong username format.'
    code = 'invalid_format'

我以这种方式将此验证器添加到我的字段中:

class RegistrationForm(forms.Form):
    signup_username = forms.CharField(label='Username', max_length=20,
                                  validators=[UsernameValidator])

但如果我使用错误的用户名(如123abc),验证器不会失败。 从RegexValidator继承的正确方法是什么?

我需要在几个方面进行验证,这就是为什么我需要一个自己的验证器。

3 个答案:

答案 0 :(得分:1)

创建RegexValidator的实例。

validate_username = RegexValidator(regex=r'^([a-zA-Z]{4}[\w]{1,16})$',
                                   message = 'Wrong username format.',
                                   code = 'invalid_format')

...validators = [validate_username]...

答案 1 :(得分:0)

我编写了一个自己的函数,而不是继承RegexValidator,这很有效。

def validate_username(value):
    regex = r'^([a-zA-Z]{4}[\w]{1,16})$'
    if not re.match(regex, value):
        raise ValidationError('Wrong username format.')

答案 2 :(得分:0)

Validators参数应该是可调用对象的列表 在你的情况下它应该是

validators=[UsernameValidator()]