📅  最后修改于: 2023-12-03 14:51:02.459000             🧑  作者: Mango
在Django中,可以使用ModelAdmin来自定义管理后台页面以编辑和管理模型。为了编辑用户模型并在创建新用户时添加字段集,我们需要通过继承ModelAdmin类来创建一个自定义的管理员类。
首先,在你的应用的admin.py
文件中导入需要的模块:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
然后,创建一个继承自UserAdmin
的新管理员类,并添加一个名为fieldsets
的属性来定义字段集:
class CustomUserAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
('Personal Info', {'fields': ('first_name', 'last_name', 'email')}),
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
('Custom Fields', {'fields': ('custom_field1', 'custom_field2')}),
)
在上面的代码中,我们创建了几个字段集来组织用户模型的字段。每个字段集由一个元组组成,其中第一个元素是字段集的标题,第二个元素是一个包含字段名称的字典。
现在,我们需要将自定义管理员类与用户模型关联起来。为此,在admin.py
文件中注册CustomUserAdmin
类:
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
到目前为止,我们已经在自定义管理员中添加了带有字段集的新字段以编辑用户。但是,我们还需要在创建新用户时添加字段集。
为了实现这一点,我们需要创建一个自定义表单来扩展默认的用户创建表单。
首先,导入所需的模块:
from django.contrib.auth.forms import UserCreationForm
from django import forms
然后,创建一个继承自UserCreationForm
的新表单类,并添加一个名为fieldsets
的属性,其中包含我们想要在创建新用户时显示的字段:
class CustomUserCreationForm(UserCreationForm):
custom_field1 = forms.CharField(max_length=100)
custom_field2 = forms.CharField(max_length=100)
class Meta:
model = User
fields = ('username', 'custom_field1', 'custom_field2', 'password1', 'password2')
fieldsets = (
(None, {'fields': ('username', 'password1', 'password2')}),
('Custom Fields', {'fields': ('custom_field1', 'custom_field2')}),
)
在上面的代码中,我们添加了两个自定义字段custom_field1
和custom_field2
,并在表单的Meta
类中指定了我们想要显示的字段。
然后,我们需要将自定义的创建表单与管理员类关联起来。为此,我们需要在CustomUserAdmin
中添加一个名为add_form
的属性:
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
现在,我们已经在创建新用户时添加了字段集。
最后,记得在admin.py
文件中导入CustomUserAdmin
和CustomUserCreationForm
:
from .admin import CustomUserAdmin, CustomUserCreationForm
这是一个在ModelAdmin
中添加带有字段集的新字段以编辑用户,并在创建新用户时添加字段集的示例。通过以上代码片段,你可以在Django管理后台中自定义用户模型的编辑和创建表单,以满足你的需求。
我希望这段代码对你有帮助!