Конфликт между def : has_permission и has_OBJECT_permission Python-Django

Я пишу программу Djando. Мне нужно реализовать бэкенд для мобильного приложения с объявлениями. Объявления могут быть созданы (POST), изменены (PATCH) (только создатель объявления может) и просмотрены (GET). Я ограничил только 10 объявлений со статусом = 'OPEN'. Неаутентифицированный пользователь может делать только (GET) API запрос.

Я отправляю API-запрос 'PATCH' для изменения объявления. Но отладчик передает только has_permission и не получает доступ к has_object_permission. Он обращается к has_object_permission, только если нет has_permission.

Как я могу заставить оба метода работать одновременно?

файл - permissions.py

class IsOwnerOrReadOnly(permissions.BasePermission):

    def has_permission(self, request, view):
         if request.method == 'GET':
             return True
         if request.method == 'POST' \
                 and Advertisement.objects.filter \
                 (creator=request.user, status = 'OPEN').count() < 10:
             return [IsAuthenticated()]
         return []

    def has_object_permission(self, request, view, obj):
        if request.method == 'PATCH':
            return request.user.is_authenticated and obj.creator == request.user
        return []

файл - views.py

class AdvertisementViewSet(ModelViewSet):
    """ViewSet for  Advertisement."""

    queryset = Advertisement.objects.all()
    serializer_class = AdvertisementSerializer
    permission_classes = [IsOwnerOrReadOnly]
    #throttle_classes = [AnonRateThrottle]

API-запрос

# attempt to change ad
PATCH {{baseUrl}}/advertisements/2/
Content-Type: application/json
Authorization: Token 8affcdadbdd6b9f8ebefa5a552aa127ebff60178

{
  "status": "CLOSED"
}
Вернуться на верх