我正在一个要求用户名包含正斜杠的网站上工作。用户名类似“ CSC / 15U / 1155”。
django说'输入有效的用户名。此值只能包含字母,数字和@ /。/ + /-/ _字符。'。
我的问题如下:如果有帮助,是否可以在不扩展用户模型的情况下允许用户名正斜杠。
提前谢谢。
答案 0 :(得分:1)
由于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
模型时,需要更新AUTH_USER_MODEL
中的settings.py
。例如:
# settings.py
AUTH_USER_MODEL = 'yourapp.models.CustomUser'
如果您想覆盖username
中的CustomUser
字段,则可以这样做:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
username = models.CharField(max_length=255, unique=True)
有关如何在Django中使用自定义用户模型的信息,请参见the documentation。
对于adminsite,您需要覆盖您的登录表单。例如:
# 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
默认的adminsite登录无效,因为它使用Username字段来规范输入值。