我的网站正在使用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', )