Разрешить DELETE только без pk Django Rest Framework
Требуется разрешить посылать запросы:
DELETE /users (в body находятся ids для удаления)
Но запретить:
DELETE /users/{id}
Мой алгоритм:
Создал обычный класс
UserViewSet
, который наследуется отDestroyModelMixin
иGenericViewSet
.Реализовал метод
def delete(self, request)
, теперь запросDELETE /users
выполняется корректно.
Проблема в том, что нужно еще запретить посылать запрос вида DELETE /users/{id}
.
Пытался перестать наследоваться от DestroyModelMixin
, но тогда выдается страница 404 Not Found
, так как отсутствует машрут.
Пытался реализовать метод delete
с такой сигнатурой:
def delete(self, request, pk=None):
if pk:
return Response(data='PK is not allowed in DELETE method')
Но, видимо для DELETE /users/{id}
всегда используется метод def destroy(self, request, pk)
.
Единственное, как у меня получилось сделать - это вот так:
def destroy(self, request, pk=None):
raise exceptions.MethodNotAllowed('DELETE with PK')
При запросе DELETE /users/{id}
выдается, что метод DELETE with PK
не разрешен.
Но я так понимаю - это совсем странное решение и можно сделать как-то намного проще. Буду благодарен за подсказку.
Также в urls.py
используются SimpleRouter
маршруты, не особо понимаю нужно ли в данном случае от них уходить.