Дополнительное действие DRF без суффикса

Я пытаюсь использовать Django Rest Framework для выполнения дополнительного действия из набора представлений. В URL-адресах у меня есть:

router = SimpleRouter()
router.register(r'mymodels', MyModelViewSet, basename='mymodel')

urlpatterns = [
  url(r'', include(router.urls)),
]

И в views.py:

class MyModelViewSet(ListModelMixin, GenericViewSet):
  serializer_class = MyModelSerializer

Так что я могу отправить GET /mymodel/ запрос. Я хотел бы иметь возможность отправлять PATCH /mymodel/, но не знаю, как настроить действие. В настоящее время у меня есть:

class MyModelViewSet(ListModelMixin, GenericViewSet):
  serializer_class = MyModelSerializer
  allowed_http_methods = ['get', 'patch']

  @action(methods=['patch'], detail=False, url_path='', suffix='')
  def some_action(self, request: Request) -> Response:
    # do some stuff
    return Response()

Однако у меня есть 405 method not allowed ответ. Я могу отправлять данные с помощью PATCH /mymodel/some-action/, но мне нужно избавиться от последней части URL-адреса.


person gonczor    schedule 27.05.2020    source источник
comment
Не совсем. Я знаю, что могу выполнять методы DELETE/PATCH и т. д. для подробных действий, но я хочу сделать это для неподробных и не добавлять имя действия в конце URL-адреса.   -  person gonczor    schedule 27.05.2020
comment
поэтому в одном и том же API вы хотите иметь два метода пути, первый из которых похож на PATCH api/my_api/, второй - PARCH api/my_api/id/. Верно? Или вы хотите иметь только первый?   -  person ncopiy    schedule 27.05.2020
comment
Только первый.   -  person gonczor    schedule 27.05.2020
comment
посмотрите мой ответ на вопрос по ссылке из первого комментария   -  person ncopiy    schedule 27.05.2020
comment
попробуйте заменить delete на patch в декораторе и имени функции   -  person ncopiy    schedule 27.05.2020
comment
О, извините, я только заметил принятый ответ. Изменение имени на patch сделало свое дело. Спасибо за помощь :)   -  person gonczor    schedule 27.05.2020