"Метод http не привязан к просмотру" при документировании представления на основе классов в drf_yasg

Ранее я задокументировал свои функциональные представления следующим образом:

@swagger_auto_schema(
    operation_id='ChangePassword',
    methods=['POST'],
    request_body=ChangePasswordSerializer,
    responses={
        '200': 'empty response body',
    })
def change_password(request):
    # code here

Затем мы переключили наши представления на классовые, поэтому я просто скопировал декоратор документации в post метод:

class UserChangePasswordView(APIView):
    @swagger_auto_schema(
        operation_id='ChangePassword',
        methods=['POST'],
        request_body=ChangePasswordSerializer,
        responses={
            '200': 'empty response body',
        })
    def post(self, request):
        # code here 

Тем не менее, при запуске этого декоратора, drf_yasg бросил исключение

File "/usr/local/lib/python3.6/site-packages/drf_yasg/utils.py", line 126, in decorator
    assert all(mth in available_methods for mth in _methods), "http method not bound to view"

Что здесь происходит? Что означает это сообщение об ошибке?

2 ответа

Решение

Обратите внимание, что в исходном ядре drf-yasg это упомянуто

method а также methods являются взаимоисключающими и должны присутствовать только при декорировании метода представления более чем одним методом HTTP-запроса.

Так methods будет действительным, если ваш UserChangePasswordView.post() обрабатывается более одного метода.

Оказывается, что указание метода HTTP представления как в декораторе, так и неявно через имя метода, к которому применяется декоратор, недопустимо.

Решение состоит в том, чтобы просто удалить methods ключ от декоратора:

class UserChangePasswordView(APIView):
    @swagger_auto_schema(
        operation_id='ChangePassword',
        request_body=ChangePasswordSerializer,
        responses={
            '200': 'empty response body',
        })
    def post(self, request):
        # code here
Другие вопросы по тегам