小编典典

禁用 ViewSet 中的方法,django-rest-framework

all

ViewSets具有自动列出、检索、创建、更新、删除、…的方法

我想禁用其中的一些,我想出的解决方案可能不是一个好的解决方案,因为OPTIONS仍然声明那些是允许的。

关于如何以正确的方式做到这一点的任何想法?

class SampleViewSet(viewsets.ModelViewSet):
    queryset = api_models.Sample.objects.all()
    serializer_class = api_serializers.SampleSerializer

    def list(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
    def create(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

阅读 137

收藏
2022-08-16

共1个答案

小编典典

的定义ModelViewSet是:

class ModelViewSet(mixins.CreateModelMixin, 
                   mixins.RetrieveModelMixin, 
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet)

所以与其扩展ModelViewSet,为什么不直接使用你需要的东西呢?例如:

from rest_framework import viewsets, mixins

class SampleViewSet(mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    viewsets.GenericViewSet):
    ...

使用这种方法,路由器应该只为包含的方法生成路由。

参考

模型视图集

2022-08-16