在Django的UserAdmin中,“add_fieldsets”是什么意思?

ffdz8vbo  于 2023-05-19  发布在  Go
关注(0)|答案(5)|浏览(221)

我正在学习一个教程,介绍如何为身份验证目的创建一个自定义用户。本教程使用了UserAdmin中的某个属性add_fieldsets。这是什么意思?我似乎找不到任何关于这方面的文件。
下面是代码片段:

class UserAdmin(UserAdmin):
"""Define admin model for custom User model with no email field."""

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Personal info', {'fields': ('first_name', 'last_name')}),
        ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
        ('Important dates', {'fields': ('last_login', 'date_joined')}),
        ('Contact info', {'fields': ('contact_no',)}),)

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2'),}),)

    list_display = ('email', 'first_name', 'last_name', 'is_staff')
    search_fields = ('email', 'first_name', 'last_name')
    ordering = ('email',)

下面是我所遵循的教程:How to use email as username for Django authentication (removing the username)

9wbgstp7

9wbgstp71#

add_fieldsets类变量用于定义将在创建用户页面上显示的字段。
不幸的是,它没有很好的文档,我发现最接近文档的是https://docs.djangoproject.com/en/2.1/topics/auth/customizing/代码示例中的注解(add_fieldsets的搜索页面)。
classes键设置我们想要应用到表单部分的任何自定义CSS类。
fields键设置您希望在表单中显示的字段。
在您的示例中,创建页面将允许您设置emailpassword1password2

cwtwac6a

cwtwac6a2#

add_fieldsets字段的工作原理类似于fieldsets字段,允许控制管理页面的布局,但特别是创建对象页面,而fieldsets字段用于控制更改对象页面。
使用add_fieldsets字段,您可以决定哪些所有字段应显示在创建对象页面上,添加描述等。
在您的示例中,它将创建一个没有名称的部分(设置为None),使用classes键集为所有字段设置特定宽度,并使用fields键集显示字段email、password 1和password 2
我希望我消除了你的疑虑!!

gpfsuwkq

gpfsuwkq3#

使用BaseUserAdmin类,可以实现add_formadd_fieldsets等功能

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

class UserAdmin(BaseUserAdmin):
    """Define admin model for custom User model with no email field."""

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Personal info', {'fields': ('first_name', 'last_name')}),
        ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
        ('Important dates', {'fields': ('last_login', 'date_joined')}),
        ('Contact info', {'fields': ('contact_no',)}),)

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2'),}),)

    list_display = ('email', 'first_name', 'last_name', 'is_staff')
    search_fields = ('email', 'first_name', 'last_name')
    ordering = ('email',)
dy2hfwbg

dy2hfwbg4#

从Django文档中(参见注解):

  • 如果你使用的自定义ModelAdmin是django.contrib.auth.admin.UserAdmin的子类,那么你需要将你的自定义字段添加到fieldsets(用于编辑用户的字段)和add_fieldsets(用于创建用户时使用的字段)。*

因此它基本上与fieldsets相同,但用于创建用户,并且仅在扩展UserAdmin时才需要。fieldsetsadd_fieldsets之间的唯一区别是,您必须将密码字段处理得稍有不同(“password1”和“password2”,而不是“password”)。
文档提供了一个实现自定义用户的完整示例:https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#custom-users-admin-full-example

dxpyg8gm

dxpyg8gm5#

add_fieldsets

  • 可以设置字段,在【添加用户】页面显示。
  • 是只有UserAdmin类具有的特殊选项,因此ModelAdmin类没有它。* UserAdmin类扩展了ModelAdmin类。

相关问题