Сайт администратора Django не позволяет использовать useranmes с \, хотя я переопределил валидатор - PullRequest
0 голосов
/ 29 октября 2019

Мой сайт использует проверку подлинности Windows, что означает, что когда я получаю имена пользователей, у них есть \ в них. Это также означает, что я не могу добавлять новых пользователей или изменять существующих через сайт администратора Django. Я пытаюсь добиться разрешения имен пользователей.

Я пытался реализовать это решение от переполнения стека

My admin.py

class DomainUserAdmin(UserAdmin):
    form = DomainUserChangeForm
    add_form = DomainUserChangeForm


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

My Validators.py

class DomainUnicodeUsernameValidator(UnicodeUsernameValidator):
    """Allows \."""
    print2('This is a test')
    regex = r'^[\w.@+-\\]+\Z'
    message = _(
        'Enter a valid username. This value may contain only letters, '
        'numbers, and \/@/./+/-/_\ characters.'
    )
    flags = 0

My models.py

class DomainUser(User):
    class Meta:
        proxy = True

    def __init__(self, *args, **kwargs):
        self._meta.get_field('username').validators = [DomainUnicodeUsernameValidator]

        super().__init__(*args, **kwargs)

myforms.py

class DomainUserChangeForm(UserChangeForm):
    username = forms.CharField(max_length=150, validators=[DomainUnicodeUsernameValidator])
    class Meta(UserChangeForm.Meta):
        model = DomainUser
        help_texts = {
            'username': _('Required. 150 characters or fewer. Letters, digits and \/@/./+/-//_ only.'),  # NOQA
        }

Это в основном точная копия другого решения (я собираюсь изменить его, чтобы добавить уникальность, когда оно работает). Я что-то упустил или мне нужно что-то менять? Когда я пытаюсь изменить пользователя в админке, он все равно говорит Enter a valid username. This value may contain only letters, numbers, and @/./+/-/_ characters., но мне нужно это включить.

Спасибо за помощь!

1 Ответ

0 голосов
/ 30 октября 2019

Ну, если кто-то ищет это, я решил добавить имя пользователя в поле только для чтения в admin.py. Таким образом, он не проходит проверку, и, поскольку я использую Windows Auth, пользователи не должны иметь возможность редактировать свое имя пользователя.

readonly_fields = ('username', 'password', )

...