如何在Django用户名中包含正斜杠

时间:2018-11-17 18:30:33

标签: django django-users

我正在一个要求用户名包含正斜杠的网站上工作。用户名类似“ CSC / 15U / 1155”。

django说'输入有效的用户名。此值只能包含字母,数字和@ /。/ + /-/ _字符。'

我的问题如下:如果有帮助,是否可以在不扩展用户模型的情况下允许用户名正斜杠。

提前谢谢。

1 个答案:

答案 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字段来规范输入值。