Skip to content Skip to sidebar Skip to footer

How To Override Django 'unique' Error Message For Username In Custom Userchangeform

I'm trying to override the default 'A user with that Username already exists.' error message displayed when entering an existing username in my custom UserChangeForm form. Django v

Solution 1:

Currently unique error message cannot be customized on a form field level, quote from docs:

class CharField(**kwargs)

...

Error message keys: required, max_length, min_length

...

class RegexField(**kwargs)

...

Error message keys: required, invalid

So, to summarize, for your username field only required, invalid, max_length, min_length error messages are customizeable.

You can only set unique error message on a model field level (see source).

Also see relevant ticket.

Also see how django.contrib.auth.forms.UserCreationForm was made (pay attention to custom duplicate_username error message) - custom error message could be an option for you too.

Hope that helps.

Solution 2:

According to alecxe's answer, I ended up creating a custom validation method in my form:

classCustomUserChangeForm(forms.ModelForm):
    error_messages = {
        'duplicate_username': ("My message for unique")
    }

    username = forms.RegexField(
        label="User name", max_length=30, regex=r"^[\w.@+-]+$",
        error_messages={
            'invalid': ("My message for invalid")
        }
    )

    classMeta:
        model = get_user_model()
        fields = ['username', 'first_name', 'last_name', 'email']

    defclean_username(self):
        # Since User.username is unique, this check is redundant,# but it sets a nicer error message than the ORM. See #13147.
        username = self.cleaned_data["username"]
        if self.instance.username == username:
            return username
        try:
            User._default_manager.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError(
            self.error_messages['duplicate_username'],
            code='duplicate_username',
        )

See the clean_username method, taken from the existingUserCreationForm form to which I added a check to compare with the current user's username.

Solution 3:

at the moment it is possible to override the unique error message at the form level:

classMyForm(forms.ModelForm):

    classMeta:
        model = MyModelerror_messages= {
            'my_unique_field': {
                'unique': 'not a snowflake after all'
            },
        }

Post a Comment for "How To Override Django 'unique' Error Message For Username In Custom Userchangeform"