📜  在 ModelAdmin 中添加带有字段集的新字段以编辑用户,并在创建新用户时添加_fieldsets - Python (1)

📅  最后修改于: 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_field1custom_field2,并在表单的Meta类中指定了我们想要显示的字段。

然后,我们需要将自定义的创建表单与管理员类关联起来。为此,我们需要在CustomUserAdmin中添加一个名为add_form的属性:

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm

现在,我们已经在创建新用户时添加了字段集。

最后,记得在admin.py文件中导入CustomUserAdminCustomUserCreationForm

from .admin import CustomUserAdmin, CustomUserCreationForm

这是一个在ModelAdmin中添加带有字段集的新字段以编辑用户,并在创建新用户时添加字段集的示例。通过以上代码片段,你可以在Django管理后台中自定义用户模型的编辑和创建表单,以满足你的需求。

我希望这段代码对你有帮助!