Django Admin站点不允许我拥有带有\的用户名称,即使我重写了验证器



我的网站正在使用Windows身份验证,这意味着当我获取用户的用户名时,他们的用户名中有一个\。这也意味着我不能通过Django管理站点添加新用户或更改现有用户。我正在努力实现的是允许使用用户名。

我尝试过从堆栈溢出实现这个解决方案

我的管理员py

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

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

我的验证器.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)

我的表单.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.,但我需要包含它。

谢谢你的帮助!

如果有人在寻找这个,我的解决方案是在admin.py中添加用户名作为只读字段。这样它就不会得到验证,而且由于我使用的是windows Auth,用户无论如何都不能编辑他们的用户名。

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

最新更新