В Django есть несколько способов ограничить модели в админке по группам. Рассмотрим два самых распространенных способа.
- Использование
ModelAdmin
иGroupRequiredMixin
:
- Создайте класс, который наследуется от
admin.ModelAdmin
. - В этом классе определите
get_queryset
метод, который будет возвращать объекты только для пользователей из определенной группы. - Затем создайте класс
GroupRequiredMixin
, который будет проверять, принадлежит ли пользователь к определенной группе перед доступом к административному разделу. - Наконец, создайте класс
MyModelAdmin
, который наследуется отModelAdmin
иGroupRequiredMixin
, и укажите его для вашей модели в административной конфигурации.
Пример кода:
from django.contrib import admin class MyModelAdmin(admin.ModelAdmin): def get_queryset(self, request): qs = super().get_queryset(request) user = request.user if user.groups.filter(name='MyGroup').exists(): return qs # Фильтруем объекты только для пользователей из группы "MyGroup" return qs.none() # Возвращаем пустой QuerySet для всех остальных пользователей class GroupRequiredMixin: def has_permission(self, request): user = request.user return user.groups.filter(name='MyGroup').exists() admin.site.register(MyModel, MyModelAdmin)
- Использование декоратора
@user_passes_test
:
- Создайте функцию, которая будет проверять, принадлежит ли пользователь к определенной группе.
- Декорируйте вашу функцию с помощью декоратора
@user_passes_test
. - Затем создайте класс
MyModelAdmin
, который наследуется отModelAdmin
, и укажите его для вашей модели в административной конфигурации.
Пример кода:
from django.contrib import admin from django.contrib.auth.decorators import user_passes_test def in_my_group(user): return user.groups.filter(name='MyGroup').exists() class MyModelAdmin(admin.ModelAdmin): pass admin.site.register(MyModel, MyModelAdmin) admin.site.register(MyModel, MyModelAdmin) @user_passes_test(in_my_group) def my_view(request): ...
Оба этих способа позволяют ограничить доступ к моделям по группам пользователей в админке Django. В зависимости от ваших потребностей вы можете выбрать наиболее удобный для вас способ.