You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中UserAdmin里的add_fieldsets属性作用是什么?

关于Django UserAdmin中add_fieldsets属性的解释

嘿,我来给你把这个add_fieldsets讲明白——这可是自定义Django用户模型时的关键配置项!

首先得和它的兄弟fieldsets对比着看:

  • fieldsets用来控制Django Admin中编辑已有用户页面的字段分组与布局,你代码里的fieldsets就把邮箱、个人信息、权限等内容分成了不同区块,方便编辑时查看修改。
  • 而add_fieldsets是专门针对创建新用户页面的配置!它决定了在Admin后台点击「添加用户」时,会显示哪些字段、怎么分组、用什么样式。

结合你贴的代码来看:

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',)

这里的add_fieldsets做了两件核心事:

  1. 指定添加新用户时要显示的字段:email(替代默认的username作为登录标识)、password1和password2(Django自带的密码确认字段,确保用户输入的密码一致)。
  2. 给字段组加上wide类,让表单区域更宽,提升后台操作的视觉体验。

教程里重写这个属性的原因很明确:默认Django UserAdmin是基于username创建用户的,而你参考的教程要把邮箱作为唯一登录标识,所以必须自定义添加页面的字段,移除username并替换成email,同时保留密码确认的逻辑——这就是add_fieldsets的核心价值啦。

内容的提问来源于stack exchange,提问作者Donovan Keating

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:09:53