这应该像覆盖 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的子类,也就是User模型默认使用的ModelAdmin。在这里,我们声明我们希望在 ModelAdmin 中使用我们新的自定义表单。
请注意,对于这些子类中的每一个,我们只更改我们必须更改的内容。该类的其余部分将从其父级(分别为 UserCreationForm、UserChangeForm 和 UserAdmin)继承。
最后,我们执行向管理站点注册用户模型的重要步骤。为此,我们取消注册默认的 UserAdmin,然后使用我们改进的 MyUserAdmin 类进行注册。
您会发现使用这些技术非常容易自定义 Django 管理站点,尤其是考虑到管理站点只是一个普通的 Django 应用程序。