Вы можете переопределить метод администратора queryset
, чтобы просто отображать элементы пользователя:
def queryset(self, request):
user = getattr(request, 'user', None)
qs = super(MyAdmin, self).queryset(request)
if user.is_superuser:
return qs
return qs.filter(user=user)
Кроме того, вам также следует позаботиться о has_change_permission
и has_delete_permission
-методах, например:
def has_delete_permission(self, request, obj=None):
if not request.user == obj.user and not request.user.is_superuser:
return False
return super(MyAdmin, self).has_delete_permission(request, obj)
То же самое для has_change_permission
!
list_select_related
используется только при получении набора запросов администратора для немедленного извлечения связанных данных из отношений, а не тогда, когда это необходимо!
Если ваша основная цель состоит только в том, чтобы ограничить пользователя неспособностью работать с другими объектами, вышеуказанный подход будет работать, если он усложняется, и вы не можете определить полномочия просто из ОДНОГО атрибута, такого как пользователь, Изучите предложения django по разрешениям на уровне строк!