Django管理员 - 更改权限列表 [英] Django admin - change permissions list

查看:777
本文介绍了Django管理员 - 更改权限列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Is there any possibility to change permissions list in user edit page? I don't wan't to show all of permissions for example admin log entry or auth group etc. How can I modify a main queryset to exclude some of it?

推荐答案

我从这个主题,这也回答了你的问题,但这并不清楚。

I got the idea from this topic, which also answer your question, but it's not that clear.

你必须用UserAdmin格式覆盖用户权限的查询用于可视化。

You have to overwrite the queryset of user permissions in the UserAdmin form used for visualization.

为此,最简单的方法是创建一个UserAdmin子类并覆盖 get_form 方法:从django.contrib.auth.models导入$ p

To do this, the easiest way is to create a subclass of UserAdmin and overwrite the get_form method:

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

您可以更改任何您想要的查询器的过滤器:
示例:

You can change the filter of your queryset for whatever you want: Examples:

# 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'])

创建课程后,您必须使用新创建的管理员注册用户模型:

After you create your class, you have to register your User model with your newly created Admin:

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

编辑:
我从Maik Hoepfel添加了评论,因为这个代码在创建新用户时django崩溃了。

I added comment from Maik Hoepfel, because this code made django crashed when creating new user.

您可以使用组编辑页面中的权限列表执行相同操作,但必须创建从GroupAdmin扩展的另一个管理员,并更改 form.base_fields ['user_permissions'] with for m.base_fields ['permissions']

You can do the same with the permission list in your Group edit page, but you have to create another Admin that extends from GroupAdmin, and change form.base_fields['user_permissions'] with form.base_fields['permissions']

这篇关于Django管理员 - 更改权限列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆