是否有可能在用户编辑页面中更改权限列表?我不想显示所有权限,例如管理员日志条目或身份验证组等。如何修改主查询集以排除其中的一些?
问问题
5649 次
2 回答
11
我从这个主题中得到了这个想法,它也回答了你的问题,但还不是很清楚。
您必须覆盖用于可视化的 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'])
创建类后,您必须向新创建的管理员注册用户模型:
admin.site.unregister(User) # You must unregister first
admin.site.register(User, MyUserAdmin)
编辑: 我添加了来自 Maik Hoepfel 的评论,因为这段代码让 django 在创建新用户时崩溃了。
您可以对组编辑页面中的权限列表执行相同操作,但您必须创建另一个从 GroupAdmin 扩展的管理员,并更改form.base_fields['user_permissions']
为form.base_fields['permissions']
于 2011-11-14T17:41:27.077 回答
4
雷纳托的回答几乎是完美的。Django Admin 使添加用户成为具有相同表单的两步过程,并且他的代码在第一步中失败并出现 KeyError for 'user_permissions'。
修复很简单,只需使用下面的代码:
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
于 2012-07-18T14:21:00.037 回答