How To Override Django 'unique' Error Message For Username In Custom Userchangeform
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"