Как включить косую черту в имени пользователя django - PullRequest
0 голосов
/ 17 ноября 2018

Я работаю на веб-сайте, который требует, чтобы имя пользователя включало косую черту. что-то вроде «CSC / 15U / 1155» в качестве имени пользователя.

django говорит 'Введите действительное имя пользователя. Это значение может содержать только буквы, цифры и символы @ /. / + / - / _. '.

У меня следующий вопрос: есть ли способ разрешить косую черту в имени пользователя без расширения модели пользователя, если есть помощь?

Заранее спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

Эта ошибка возникает из-за валидатора имени пользователя Django .Таким образом, вы можете переопределить его следующим образом (Копия вставлена ​​из документации):

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.

Или, если вы не хотите использовать какие-либо валидаторы, просто переопределите поле имени пользователя .

Обновление

При использовании модели 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.

Для административного сайта вам необходимо переопределить форму входа в систему.Например:

# some form

from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
    username = forms.CharField(label='username', max_length=100)

И обновить в urls.py ( согласно этому ответу ):

from django.contrib import admin
from my.forms import AuthenticationForm

admin.autodiscover()
admin.site.login_form = LoginForm

Вход по умолчанию для администратора не работает, поскольку он использует Имя пользователя поле, которое нормализует входное значение.

...