有点令人沮丧的问题,有一些类似的问题,但我似乎无法得到任何适合我的答案。
首先:我的网站上的注册/登录完全通过django-allauth完成。它有一个设置ACCOUNT_USERNAME_VALIDATORS
,这适用于创建用户 - 我只需要使用此正则表达式r'^[\w\.@+\- ]+$'
定义验证器并将设置指向它。
问题是如果我尝试编辑管理员中的现有用户(例如给他们权限),我会因为空格而导致用户名字段无效时收到错误。我从django docs尝试了一些像这种方法的东西:
from django.contrib.auth.models import User
from django.contrib.auth.validators import UnicodeUsernameValidator
class MyValidator(UnicodeUsernameValidator):
regex = r'^[\w\.@+\- ]+$'
class MyUser(User):
username_validator = MyValidator()
class Meta:
proxy = True
我还尝试在admin.py中覆盖UserChangeForm:
class MyUserChangeForm(UserChangeForm):
username = forms.RegexField(
label='Username',
max_length=30,
regex=r'^[\w\.@+\- ]+$',
help_text = 'Required. 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).')
class CustomUserAdmin(UserAdmin):
form = MyUserChangeForm
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
但两者都没有运气。我没有收到任何错误,但我仍然无法将更改保存到用户名中包含空格的用户。我无法帮助,但觉得我错过了一些愚蠢的东西,从其他答案来看,这似乎应该是相当简单的。
答案 0 :(得分:0)
似乎基于此bug report,username_validator设置无法按预期工作 - 尽管该错误已经过时且2.0的文档仍然提供此方法,但我假设它没有&#因为我已经尝试了一切,所以我已经修好了。
最终我会咬紧牙关并转移到自定义用户模型,我应该从一开始就完成它但幸运的是我只是实现了django all-auth作为我的独家登录方法并计划放弃现有用户,所以希望迁移不会太麻烦。
编辑:对于遇到此问题的其他人,我强烈建议您切换到自定义用户模型。切换中期项目并不像文档听起来那样可怕。