由于Django's Username validator 而发生此错误。所以你可以像这样覆盖它(从文档中复制粘贴):
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.
或者,如果您不想使用任何验证器,那么只需 override the username field。
更新
当您使用CustomUser模型时,您需要更新settings.py中的AUTH_USER_MODEL。例如:
# settings.py
AUTH_USER_MODEL = 'yourapp.models.CustomUser'
如果你想覆盖CustomUser中的username字段,那么你可以这样做:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
username = models.CharField(max_length=255, unique=True)
请参阅the documentation 了解如何在 Django 中使用自定义用户模型。
对于管理站点,您需要覆盖您的登录表单。例如:
# some form
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
username = forms.CharField(label='username', max_length=100)
并在 urls.py(as per this answer) 中更新:
from django.contrib import admin
from my.forms import AuthenticationForm
admin.autodiscover()
admin.site.login_form = LoginForm
默认管理站点登录不起作用,因为它使用规范化输入值的Username 字段。