This error is occurring because of Django's Username validator. So you can override it like this(Copy Pasted from documentation):
from django.contrib.auth.models import User
from django.contrib.auth.validators import ASCIIUsernameValidator
class CustomUser(User):
username_validator = ASCIIUsernameValidator() # or your custom validator
class Meta:
proxy = True # If no new field is added.
Or if you don't want to use any validators, then just override the username field.
Update
When you are using CustomUser
model, you need to update AUTH_USER_MODEL
in settings.py
. For example:
# settings.py
AUTH_USER_MODEL = 'yourapp.models.CustomUser'
And if you want to override the username
field in CustomUser
, then you can do it like this:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
username = models.CharField(max_length=255, unique=True)
Please see the documentation on how to use custom User model in Django.
For adminsite, you need to override your login form. For example:
# some form
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
username = forms.CharField(label='username', max_length=100)
And update in urls.py(as per this answer):
from django.contrib import admin
from my.forms import AuthenticationForm
admin.autodiscover()
admin.site.login_form = LoginForm
Default adminsite login does not work because it uses Username field which normalizes the input value.