修改权限列表



是否有可能更改用户编辑页面中的权限列表?我不想不显示所有的权限,例如管理日志条目或认证组等。如何修改主查询集以排除其中的一些?

我从这个话题中得到了这个想法,它也回答了你的问题,但不是那么清楚。

您必须覆盖用于可视化的UserAdmin表单中的用户权限查询集。

要做到这一点,最简单的方法是创建UserAdmin的子类并覆盖get_form方法:
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
class MyUserAdmin(UserAdmin):
    def get_form(self, request, obj=None, **kwargs):
        # Get form from original UserAdmin.
        form = super(MyUserAdmin, self).get_form(request, obj, **kwargs)
        if 'user_permissions' in form.base_fields:
            permissions = form.base_fields['user_permissions']
            permissions.queryset = permissions.queryset.filter(content_type__name='log entry')
        return form

你可以改变你的查询集的过滤器为任何你想要的:例子:

# Exclude admin and auth.    
permissions.queryset = permissions.queryset.exclude(content_type__app_label__in=['admin', 'auth'])
# Only view permissions of desired models (Can be your models or Django's)
permissions.queryset = permissions.queryset.filter(content_type__model__in=['blog', 'post', 'user', 'group'])

创建类之后,必须将User模型注册到新创建的Admin:

admin.site.unregister(User)  # You must unregister first
admin.site.register(User, MyUserAdmin)
编辑:

我添加了Maik Hoepfel的注释,因为这段代码在创建新用户时使django崩溃。


你可以在你的组编辑页面做同样的权限列表,但你必须创建一个从GroupAdmin扩展的另一个Admin,并将form.base_fields['user_permissions']更改为form.base_fields['permissions']

Renato的答案几乎是完美的。Django管理员使用相同的表单将添加用户分为两步,他的代码在第一步中出现了'user_permissions'的KeyError错误。

修复很简单,只需使用下面的代码:

def get_form(self, request, obj=None, **kwargs):
    form = super(MyUserAdmin, self).get_form(request, obj, **kwargs)
    # adding a User via the Admin doesn't include the permissions at first
    if 'user_permissions' in form.base_fields:
        permissions = form.base_fields['user_permissions']
        permissions.queryset = permissions.queryset.filter(content_type__name='log entry')
    return form