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

Django Admin:Staff权限用户创建用户时隐藏Superuser选项

在Django Admin中移除创建管理员用户时的Superuser状态选项

如果你是拥有Staff权限且具备创建用户权限的管理员,希望在创建新用户时看不到Superuser状态选项,完全可以通过自定义UserAdmin类来实现这个需求。

实现步骤及代码

我们需要重写UserAdmin的get_fieldsets方法,根据当前登录用户的权限动态调整表单中显示的权限字段:

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django.contrib import admin

# 先取消默认User模型的注册
admin.site.unregister(User)

class MyUserAdmin(UserAdmin):
    def get_fieldsets(self, request, obj=None):
        # 创建新用户时,使用默认的添加字段集合
        if not obj:
            return self.add_fieldsets
        
        # 根据当前登录用户的权限决定显示哪些权限字段
        if request.user.is_superuser:
            # 超级用户可以看到所有权限相关字段
            perm_fields = ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')
        else:
            # 普通Staff用户只能看到指定的权限字段,隐藏Superuser相关选项
            perm_fields = ('is_active', 'is_staff')
        
        # 返回自定义的字段集合
        return [(None, {'fields': ('username', 'password')}),
                (('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
                (('Permissions'), {'fields': perm_fields}),
                (('Important dates'), {'fields': ('last_login', 'date_joined')})]

# 注册自定义的UserAdmin
admin.site.register(User, MyUserAdmin)

代码逻辑说明

  • 首先我们取消了Django默认注册的User模型,这样才能用自定义的MyUserAdmin替代它的管理逻辑。
  • get_fieldsets是Django Admin控制表单字段分组显示的核心方法,这里做了两个关键判断:
    1. 当obj=None(创建新用户的场景)时,直接使用默认的add_fieldsets,保证创建流程的基础逻辑不受影响。
    2. 根据当前登录用户是否为超级用户,动态生成权限字段集合:超级用户能看到所有权限选项,普通Staff用户则只能看到is_active和is_staff,彻底隐藏了is_superuser以及用户组、权限分配的相关选项。

这样设置后,普通Staff管理员在创建用户时就不会看到Superuser状态的选项了,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:56:26