Django允许UserChangeForm中的用户名空格

时间:2018-06-10 13:35:57

标签: python django django-authentication django-allauth django-users

有点令人沮丧的问题,有一些类似的问题,但我似乎无法得到任何适合我的答案。

首先:我的网站上的注册/登录完全通过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)

但两者都没有运气。我没有收到任何错误,但我仍然无法将更改保存到用户名中包含空格的用户。我无法帮助,但觉得我错过了一些愚蠢的东西,从其他答案来看,这似乎应该是相当简单的。

1 个答案:

答案 0 :(得分:0)

似乎基于此bug report,username_validator设置无法按预期工作 - 尽管该错误已经过时且2.0的文档仍然提供此方法,但我假设它没有&#因为我已经尝试了一切,所以我已经修好了。

最终我会咬紧牙关并转移到自定义用户模型,我应该从一开始就完成它但幸运的是我只是实现了django all-auth作为我的独家登录方法并计划放弃现有用户,所以希望迁移不会太麻烦。

编辑:对于遇到此问题的其他人,我强烈建议您切换到自定义用户模型。切换中期项目并不像文档听起来那样可怕。