Я получил идею из этой темы , которая также отвечает на ваш вопрос, но это не так ясно.
Необходимо переписать набор запросов пользовательских разрешений в форме 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']