Django管理站点不允许我使用\作为用户名,即使我超验了验证者

问题描述 投票:0回答:1

我的网站正在使用Windows身份验证,这意味着当我获得用户的用户名时,他们中就有一个\。这也意味着我无法通过Django管理站点添加新用户或更改现有用户。我要完成的工作是让用户名允许。

我已经尝试从堆栈溢出中实现this解决方案

我的管理员.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

我的模型.py

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

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

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

我的forms.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
        }

这基本上是其他解决方案的精确副本,(我将对其进行更改以在工作时增加唯一性)。我是否缺少任何东西,还是需要更改任何东西?当我尝试在admin中更改用户时,它仍然显示Enter a valid username. This value may contain only letters, numbers, and @/./+/-/_ characters.,但我需要包括在内。

感谢您的帮助!

validation django-models django-forms django-admin
1个回答
0
投票

好吧,如果有人在寻找,我的解决方案是将用户名添加为admin.py中的只读字段。这样,它就不会得到验证,并且由于我使用的是Windows Auth,因此用户无论如何都无法编辑其用户名。

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

© www.soinside.com 2019 - 2024. All rights reserved.