我的网站正在使用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.
,但我需要包括在内。
感谢您的帮助!
好吧,如果有人在寻找,我的解决方案是将用户名添加为admin.py中的只读字段。这样,它就不会得到验证,并且由于我使用的是Windows Auth,因此用户无论如何都无法编辑其用户名。
readonly_fields = ('username', 'password', )