При получении has_object_permission () отсутствуют 4 обязательных позиционных аргумента: «self», «request», «view» и «obj» - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь создать функцию has_object_permission, которая находится в файле permissions.py в пользовательском классе:

class IsOwnerOrAdmin(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        print("has object permissions statement")
        return obj.owner == request.user

    def has_permission(self, request, view):
        print("has permissions statement")
        return request.user and request.user.is_authenticated

Мой набор представлений выглядит следующим образом:

class SchoolViewSet(viewsets.ModelViewSet):
    queryset = School.objects.all()
    serializer_class = SchoolSerializer
    permission_classes = [IsOwnerOrAdmin, 
        IsOwnerOrAdmin.has_object_permission()]
    ...

Iполучить следующую ошибку при вызове / schools / endpoint:

TypeError: has_object_permission() missing 4 required positional 
arguments: 'self', 'request', 'view', and 'obj'

Однако has_permissions работает нормально, и мне не нужно явно вызывать его в моем массиве allow_classes. Это просто называется. Как мне передать эти аргументы? Я делаю это правильно? Я попробовал несколько вариантов прохождения себя, прохождения SchoolViewSet, прохождения obj=queryset и т. Д. Не был уверен, что это правильно. Не удалось найти именно то, что мне нужно, чтобы исправить это в интернете.

Обновление Как мне изменить код для вызова has_object_permission так же, как has_permission вызывается автоматически?

1 Ответ

0 голосов
/ 10 ноября 2019

permission_classes не определен правильно. Он должен включать только настроенный класс.

class SchoolViewSet(viewsets.ModelViewSet):
    queryset = School.objects.all()
    serializer_class = SchoolSerializer
    permission_classes = [IsOwnerOrAdmin]
...