猿问

Django rest框架中ViewSet和GenericViewSet的区别

我有一个 Django 休息框架GenericViewset,我试图为它设置分页,如下所示:


#settings.py

REST_FRAMEWORK = {

    'DEFAULT_PAGINATION_CLASS': 

         'rest_framework.pagination.PageNumberPagination',

    'PAGE_SIZE': 20

}


#views.py

class PolicyViewSet(viewsets.GenericViewSet):

    def list(self, request):

        queryset = Policy.objects.all()

        page = self.paginate_queryset(queryset)

        serializer = PolicySerializer(page, many=True)

        return self.get_paginated_response(serializer.data)

这按预期工作。 但是,如果我尝试使用普通的Viewset执行相同的操作,如下所示:


#views.py

class PolicyViewSet(viewsets.ViewSet):

    def list(self, request):

        queryset = Policy.objects.all()

        page = self.paginate_queryset(queryset)

        serializer = PolicySerializer(page, many=True)

        return self.get_paginated_response(serializer.data)

我收到一条错误消息:


'PolicyViewSet' 对象没有属性 'paginate_queryset'


如何使用普通的Viewset设置分页。DRF 中的 GenericViewset 和 Viewset 有什么区别?


跃然一笑
浏览 386回答 3
3回答

红颜莎娜

只有在使用通用视图或视图集时才会自动执行分页阅读文档并回答你的第二个问题 DRF 中的 GenericViewset 和 Viewset 有什么区别DRF 有两个主要的处理视图的系统:APIView:这提供了一些处理方法,来处理HTTP动词:get,post,put,patch,和delete。ViewSet:这是对 APIView 的抽象,它提供操作作为方法:list:只读,返回多个资源(http 动词:)get。返回一个字典列表。retrieve:只读,单一资源(http 动词:get,但需要一个 id)。返回单个字典。create:创建一个新的资源(HTTP动词:post)update/partial_update:编辑资源(HTTP动词:put/patch)destroy:删除一个资源(HTTP动词:delete)GenericViewSet:GenericViewSet有很多,最常见的是ModelViewSet. 他们继承GenericAPIView并具有全面实施所有的行动:list,retrieve,destroy,updated,等等。当然,你也可以挑选其中的一些,阅读文档。

HUH函数

也只是从 GenericViewSet 继承。例如:#views.pyclass PolicyViewSet(viewsets.ViewSet, viewsets.GenericViewSet):    def list(self, request):        queryset = Policy.objects.all()        page = self.paginate_queryset(queryset)        serializer = PolicySerializer(page, many=True)        return self.get_paginated_response(serializer.data)

慕哥9229398

如何使用普通视图集设置分页?如果你想在你的视图集中使用“pagination_class”,那么你应该使用GenericViewSet而不是ViewSet。
随时随地看视频慕课网APP

相关分类

Python
我要回答