Django 允许在 UserChangeForm 中的用户名中使用空格
Django allow spaces in username within UserChangeForm
有点令人沮丧的问题,有几个类似的问题,但我似乎无法得到任何适合我的答案。
首先:signup/login 在我的网站上是完全通过 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)
但两者都不走运。我没有收到任何错误,但我仍然无法将更改保存到用户名中有空格的用户。我忍不住觉得我错过了一些愚蠢的东西,从其他答案看来这应该是相当简单的。
似乎基于这个 bug report username_validator 设置没有按预期工作 - 虽然那个错误是旧的并且 2.0 的文档仍然提供这个方法,我假设它还没有修复,因为我已经尝试了一切。
最终我会硬着头皮迁移到自定义用户模型,我应该从一开始就完成它但幸运的是我只是将 django all-auth 作为我的独家登录方法并计划无论如何都要删除现有用户,所以希望迁移不会太麻烦。
编辑:对于遇到此问题的任何其他人,我强烈建议切换到自定义用户模型。在项目中期切换并不像文档听起来那么可怕。
有点令人沮丧的问题,有几个类似的问题,但我似乎无法得到任何适合我的答案。
首先:signup/login 在我的网站上是完全通过 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)
但两者都不走运。我没有收到任何错误,但我仍然无法将更改保存到用户名中有空格的用户。我忍不住觉得我错过了一些愚蠢的东西,从其他答案看来这应该是相当简单的。
似乎基于这个 bug report username_validator 设置没有按预期工作 - 虽然那个错误是旧的并且 2.0 的文档仍然提供这个方法,我假设它还没有修复,因为我已经尝试了一切。
最终我会硬着头皮迁移到自定义用户模型,我应该从一开始就完成它但幸运的是我只是将 django all-auth 作为我的独家登录方法并计划无论如何都要删除现有用户,所以希望迁移不会太麻烦。
编辑:对于遇到此问题的任何其他人,我强烈建议切换到自定义用户模型。在项目中期切换并不像文档听起来那么可怕。