matts1
matts1

Reputation: 865

Django regex validator message has no effect

I am trying to get it so that the validator tells you "username must be alphanumeric". This is my code so far. I have confirmed that it validates at the correct time. The only problem is that no matter what I try, The RegexValidator still chucks the default error ("enter a valid value").

This is my code. I also tried it without the 'message=' in front, and it still said "enter a valid value", instead of "username must be alphanumeric"

user = CharField(
    max_length=30,required=True,
    validators=[
        RegexValidator('^[a-zA-Z0-9]*$',
            message='Username must be Alphanumeric'
        ),
    ]
)

Upvotes: 25

Views: 33749

Answers (4)

jrvidotti
jrvidotti

Reputation: 530

I was having trouble running a RegexValidator, too. But I was trying to raise the error by saving the model instance. It will not work this way! Only when using ModelForms the validators are called automatically.

In https://docs.djangoproject.com/en/dev/ref/validators/#how-validators-are-run

Note that validators will not be run automatically when you save a model, but if you are using a ModelForm, it will run your validators on any fields that are included in your form."

Upvotes: 8

Hieu Nguyen
Hieu Nguyen

Reputation: 8623

How about adding the error code:

user = CharField(
    max_length=30,
    required=True,
    validators=[
        RegexValidator(
            regex='^[a-zA-Z0-9]*$',
            message='Username must be Alphanumeric',
            code='invalid_username'
        ),
    ]
)

Upvotes: 44

Viren Rajput
Viren Rajput

Reputation: 5736

Try passing the messsage as,

user = CharField(
    max_length=30,
    required=True,
    validators=[
        RegexValidator(
            regex=r'^[a-zA-Z0-9]*$',
            message=_('Username must be Alphanumeric'),
        ),
    ]
)

Upvotes: 0

drabo2005
drabo2005

Reputation: 1096

a validate user name here should contain at least one minuscule letter, one capital letter and one numeric, if i understand your code.
to complete Virendra Rajput answer correct the regex with that:
regex=r'^[a-zA-Z0-9]*$'   start with the r'

Upvotes: 0

Related Questions