如何限制 Django 管理中的非超级用户选择所有用户 groups/permissions?

How do I restrict non-superuser users in Django admin from choosing all user groups/permissions?

我能够禁用表单字段,但用户仍然可以使用 Choose all 来 select 所有组或所有权限。我怎样才能 disable/remove Choose all 为员工用户?

我需要这个的原因是因为我希望一些员工能够更改用户 Personal Info 但不能更改 PermissionsImportant dates 部分。

这是我目前使用的代码:

class UserAdmin(BaseUserAdmin):
    inlines = (AccountInline, )

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        is_superuser = request.user.is_superuser
        disabled_fields = set()  # type: Set[str]

        # Prevent non-superusers from editing their own permissions
        if not is_superuser:
            disabled_fields |= {
                'username',
                'is_staff',
                'is_superuser',
                'user_permissions',
                'groups',
                'last_login',
                'date_joined',
            }

        for f in disabled_fields:
            if f in form.base_fields:
                form.base_fields[f].disabled = True

        return form

您是否尝试过在 UserAdmin 中重新定义 get_fieldsets?像

class UserAdmin(BaseUserAdmin):
....
def get_fieldsets(self, request, obj=None):
    if not request.user.is_superuser:
        return [(None, {'fields': ('your_editable_fields',)}),]
    else:
        return self.fieldsets

稍微修改一下,它允许我只为超级用户表单保留某些字段。