Администратор Django - изменить список разрешений - PullRequest
7 голосов
/ 06 июля 2011

Есть ли возможность изменить список разрешений на странице редактирования пользователя?Я не хочу показывать все разрешения, например, запись в журнале администратора или группу авторизации и т. Д. Как я могу изменить основной набор запросов, чтобы исключить некоторые из них?

Ответы [ 2 ]

9 голосов
/ 14 ноября 2011

Я получил идею из этой темы , которая также отвечает на ваш вопрос, но это не так ясно.

Необходимо переписать набор запросов пользовательских разрешений в форме 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)

Edit: Я добавил комментарий от Maik Hoepfel, потому что этот код приводил к краху django при создании нового пользователя.


Вы можете сделать то же самое со списком разрешений на странице редактирования группы, но вам нужно создать другого администратора, который выходит из GroupAdmin, и изменить form.base_fields['user_permissions'] на form.base_fields['permissions']

4 голосов
/ 18 июля 2012

ответ Ренато почти идеален. Администратор Django делает добавление пользователя двухэтапным процессом с той же формой, и его код завершается ошибкой с KeyError для '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
...