这应该像覆盖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 Admin网站中单击“添加用户”时显示的形式。我们在这里所做的所有工作都是重新定义username
字段,以使用经过改进的,可以接受连字符的正则表达式,并更改helptext
来反映这一点。
第二个类定义执行相同的操作,除了UserChangeForm。
最终的类定义是UserAdmin的子类,它是User模型默认使用的ModelAdmin。在这里,我们声明要在ModelAdmin中使用新的自定义表单。
请注意,对于这些子类中的每个子类,我们仅需更改。该类的其余部分将从其父级继承(分别为UserCreationForm,UserChangeForm和UserAdmin)。
最后,我们执行了向管理站点注册用户模型的重要步骤。为此,我们取消注册默认的UserAdmin,然后向改进的MyUserAdmin类注册。