Ami*_*tad 9 python django django-rest-framework django-rest-viewsets
我有一个 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)
Run Code Online (Sandbox Code Playgroud)
这按预期工作。 但是,如果我尝试使用普通的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)
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
'PolicyViewSet' 对象没有属性 'paginate_queryset'
如何使用普通的Viewset设置分页。DRF 中的 GenericViewset 和 Viewset 有什么区别?
Man*_*umi 18
只有在使用通用视图或视图集时才会自动执行分页
阅读文档
并回答你的第二个问题 DRF 中的 GenericViewset 和 Viewset 有什么区别
DRF 有两个主要的处理视图的系统:
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,等等。当然,你也可以挑选其中的一些,阅读文档。
| 归档时间: |
|
| 查看次数: |
8390 次 |
| 最近记录: |