首页 > 解决方案 > 如何控制 Django Rest Framework 中允许的方法?

问题描述

我已经看到了很多关于这个主题的问题,但似乎没有一个答案能解决我的问题。

我有以下 python 模块:

视图.py:

class MyObjectViewSet(viewsets.ModelViewSet):
    queryset = MyObject.objects.all()
    serializer_class = MyObjectSerializer
    permission_classes = [permissions.AllowAny] # For testing
    
    @action(methods='POST', detail=True)
    def my_request(self, request, *args, **kwargslf):
        # Do stuff

网址.py:

router = routers.DefaultRouter()
router.register(r'myobject', views.MyObjectViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

当我尝试对 -route 发出实际的POST-request 时my_request,我得到Method POST not allowed.

但据我了解,ModelViewSet应该允许所有方法。即使我包括http_method_names = ['get', 'post', 'patch', 'put', 'head', 'delete']在我的观点中,它仍然不起作用。

标签: pythondjangorestdjango-rest-frameworkdjango-views

解决方案


methodsaction的参数应该是一个方法列表,如下所示:

@action(methods=['POST'], detail=True)
def my_request(self, request, *args, **kwargs):
    # Do stuff

推荐阅读