DRF pagination_class不返回分页结果

时间:2016-07-25 03:35:36

标签: django django-rest-framework

我试图对ViewSet的结果进行分页,但无法获得对数据进行分页的响应。

当我设置全局分页时,它运行正常,但是我不想这样做并覆盖来自GenericAPIView的所有视图/视图集,因为我只想在一个类上使用分页。< / p>

"""
don't want to do this, but this works showing that my view is based off of `GenericAPIView`.

# settings.py 
"""
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination'
}

当我删除默认设置时,此视图会丢失分页结果

# views.py
from rest_framework.viewsets import ModelViewSet

class ClipViewSet(ModelViewSet):
    serializer_class = ClipSerializer
    queryset = Clip.objects.all()
    pagination_class = PageNumberPagination

docs中的所有迹象来看,这应该是完全可能的,而且我不确定为什么在我的项目中它不起作用。我使用的是django 1.9.7和DRF 3.4.0

1 个答案:

答案 0 :(得分:2)

这不是错误。正如您在source code中看到的那样,PageNumberPagination的默认页面大小为None,这意味着即使您明确指出了一个分页器类,也会禁用分页。

您需要使用所需的PageNumberPaginationpage_size子类化,以便能够激活分页:

class MyPageNumberPagination(PageNumberPagination):
    page_size = 5

class ClipViewSet(ModelViewSet):
    pagination_class = MyPageNumberPagination

请注意,您需要在分页器类上设置page_size ,而不是在视图上。

或者将页面大小放在全局设置中:

REST_FRAMEWORK = {
    'PAGE_SIZE': 5
}

然后您可以直接使用PageNumberPagination