Django разрешает пробелы в имени пользователя в UserChangeForm - PullRequest
0 голосов
/ 10 июня 2018

Немного неприятной проблемы, есть несколько похожих вопросов, но я не могу найти ответы на какие-либо вопросы для меня.

Прежде всего: регистрация / вход на мой сайт осуществляется исключительно через django-allauth.У него есть настройка ACCOUNT_USERNAME_VALIDATORS, и он отлично работает для создания пользователей - мне просто нужно было определить валидатор с этим регулярным выражением r'^[\w\.@+\- ]+$' и указать для него настройку.

Проблема в том, что, если я пытаюсь отредактировать существующего пользователя в администраторе (например, чтобы дать ему разрешения), я получаю ошибку при сохранении, что поле имени пользователя недопустимо из-за пробелов.Я попробовал несколько вещей, таких как этот метод, из django docs :

from django.contrib.auth.models import User
from django.contrib.auth.validators import UnicodeUsernameValidator

class MyValidator(UnicodeUsernameValidator):
    regex = r'^[\w\.@+\- ]+$'

class MyUser(User):
    username_validator = MyValidator()

class Meta:
    proxy = True  

И я также попытался переопределить UserChangeForm в моем admin.py:

class MyUserChangeForm(UserChangeForm):
    username = forms.RegexField(
        label='Username',
        max_length=30,
        regex=r'^[\w\.@+\- ]+$',
        help_text = 'Required. 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).')


class CustomUserAdmin(UserAdmin):
    form = MyUserChangeForm

admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

Но не повезло ни с одним из них.Я не получаю никаких ошибок, но я все еще не могу сохранить изменения для пользователей с пробелами в их именах.Я не могу помочь, но чувствую, что упускаю что-то глупое, из других ответов кажется, что это должно быть довольно просто.

1 Ответ

0 голосов
/ 10 июня 2018

Кажется, основываясь на этом отчете об ошибке , что настройка username_validator не работает должным образом - хотя эта ошибка старая и документы по 2.0 все еще предоставляют этот метод, я предполагаю, что это не такбыло исправлено, так как я все перепробовал.

В конечном итоге я собираюсь укусить пулю и перейти на пользовательскую модель, я должен был сделать это с самого начала, но, к счастью, я просто внедряю django all-auth как мой эксклюзивный метод входа ив любом случае планируется удалить существующих пользователей, поэтому, надеюсь, миграция не доставит особых хлопот.

РЕДАКТИРОВАТЬ: всем, кто сталкивается с этим, я настоятельно рекомендую перейти на пользовательскую модель.Переключить средний проект не так страшно, как это делают документы.

...