Конфликт между 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"
}