У меня есть 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