DRF: GET возвращает TypeError (500) вместо 405 - PullRequest
0 голосов
/ 09 июля 2019

У меня есть ModelViewSet, который использует @list_route для обработки запросов POST к заданной конечной точке.

urls.py

router.register(r'my-view-set', MyViewSet, 'my-view-set')

views.py

class MyViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

    @list_route(methods=['post'], url_path='validate')
    def validate(self, request):
        # validate model
        return Response({'success': 'Validated'}, status.HTTP_200_OK)

Когда к этой конечной точке обращаются с помощью HTTP GET через curl или wget, я получаю правильный код состояния 405 какожидается:

curl:

{"detail":"Method \"GET\" not allowed."}

wget:

2019-07-09 15:06:48 ERROR 405: Method Not Allowed.

Однако, если я использую Chrome для перехода к конечной точке, я получаю ошибку 500:

TypeError at /myapp/api/v1/my-view-set/validate/
__init__() missing 1 required positional argument: 'instance'

Как мне убедить django вернуть 405 в браузер вместо 500 при вызове этой конечной точки с помощью GET вместо POST?

Django == 1.10.5 djangorestframework == 3.5.3

...