Python 允许&引用;Django管理界面中用户名中的字符
在我们的webapp中,我们需要在用户名中允许破折号“-”。 我已经为消费者注册过程启用了这个正则表达式 r'^[\w-]+$' 如何告诉管理员应用程序,以便在auth>users中编辑用户名以允许用户名中使用“-”字符?目前我无法编辑任何带有破折号的用户名,因为这将返回用户名验证错误 如果可能的话,我想尽量避免直接修补django。Python 允许&引用;Django管理界面中用户名中的字符,python,django,django-admin,Python,Django,Django Admin,在我们的webapp中,我们需要在用户名中允许破折号“-”。 我已经为消费者注册过程启用了这个正则表达式 r'^[\w-]+$' 如何告诉管理员应用程序,以便在auth>users中编辑用户名以允许用户名中使用“-”字符?目前我无法编辑任何带有破折号的用户名,因为这将返回用户名验证错误 如果可能的话,我想尽量避免直接修补django。 我对编程相当陌生,但这就是我使用“子类化”的目的吗?这应该像重写User ModelAdmin类的行为一样简单。在您的一个应用程序中,在admin.py中包含以下
我对编程相当陌生,但这就是我使用“子类化”的目的吗?这应该像重写User ModelAdmin类的行为一样简单。在您的一个应用程序中,在
admin.py
中包含以下代码
from django.contrib import admin
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class MyUserCreationForm(UserCreationForm):
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).',
error_message = 'This value must contain only letters, numbers, hyphens and underscores.')
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).',
error_message = 'This value must contain only letters, numbers, hyphens and underscores.')
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
add_form = MyUserCreationForm
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
这里有一点解释
第一个类定义(MyUserCreationForm)是UserCreationForm的子类(是的,您的术语是正确的)。这是在Django管理站点中单击“添加用户”时显示的表单。我们在这里所做的就是重新定义username
字段以使用改进的接受连字符的正则表达式,并更改helptext
以反映这一点
除了UserChangeForm之外,第二个类定义也执行相同的操作
最后一个类定义是UserAdmin的子类,UserAdmin是用户模型默认使用的ModelAdmin。在这里,我们声明希望在ModelAdmin中使用新的自定义表单
请注意,对于这些子类中的每一个子类,我们只更改必须更改的内容。该类的其余部分将从其父级继承(分别为UserCreationForm、UserChangeForm和UserAdmin)
最后,我们执行向管理站点注册用户模型的重要步骤。为此,我们取消注册默认的UserAdmin,然后使用改进的MyUserAdmin类注册
你会发现Django管理站点很容易使用这些技术进行定制,特别是考虑到管理站点只是一个普通的Django应用程序。谢谢sixthgear,这对我来说很有意义,谢谢你花时间写下详细的解释。