python - Django 在 UserChangeForm 中允许用户名中有空格
问题描述
有点令人沮丧的问题,有一些类似的问题,但我似乎无法得到任何适合我的答案。
首先:我网站上的注册/登录完全是通过 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)
但也没有运气。我没有收到任何错误,但我仍然无法将更改保存到用户名中有空格的用户。我不禁觉得我错过了一些愚蠢的东西,从其他答案看来这应该是相当简单的。
解决方案
根据这个错误报告,username_validator 设置似乎没有按预期工作 - 尽管该错误是旧的并且 2.0 的文档仍然提供此方法,但我假设它还没有得到修复,因为我已经尝试了一切。
最终我将硬着头皮迁移到自定义用户模型,我应该从一开始就完成它,但幸运的是我只是将 django all-auth 作为我的独家登录方法并计划放弃现有用户无论如何所以希望迁移不会太麻烦。
编辑:对于遇到此问题的其他人,我强烈建议切换到自定义用户模型。切换中期项目并不像文档所说的那样可怕。
推荐阅读
- python - 如果我的数据包含字符串,如何解决使用 np.loadtxt() 的问题
- assembly - 将 4 个字节同时加载到寄存器中的 mips 命令是什么?
- node.js - spawn ffmpeg 进程因权限被拒绝而失败
- wpf - 顶级滚动查看器中的嵌套用户控件不会导致滚动条
- c - 为什么 *str1 和 *(&str1),str 是 C 中 char 数组的名称,不会得到相同的结果?
- python - 列表中语法正确的人类可读字符串(使用牛津逗号)
- openlayers - OL:更改投影(使用 Proj4)不显示 geojson 层(尽管 setVisible 为真)
- visual-studio - Visual Studio Profiler 将“[broken]”显示为函数名称
- python - 将 Python 脚本转换为 PowerShell
- python - 如何获取熊猫系列中值的索引