django - DRF pagination_class 不返回分页结果

标签 django django-rest-framework

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

当我设置全局分页时它工作正常,但是我不想这样做并覆盖来自 GenericAPIView 的所有 View / View 集| ,因为我只想在一个类(class)上分页。

"""
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'
}

当我删除默认设置时,此 View 会丢失分页结果
# 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

最佳答案

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

您需要子类化 PageNumberPagination与您需要的 page_size能够激活分页:

class MyPageNumberPagination(PageNumberPagination):
    page_size = 5

class ClipViewSet(ModelViewSet):
    pagination_class = MyPageNumberPagination

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

或者将页面大小放在全局设置中:
REST_FRAMEWORK = {
    'PAGE_SIZE': 5
}

那么就可以直接使用PageNumberPagination .

关于django - DRF pagination_class 不返回分页结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38559337/

相关文章:

python - @action 的 Django Rest Framework url_pattern

python - djangorest框架在create中动态设置外键

django - API Django Rest Framework 上的多对多字段 POST 请求

django - 如何在 django 中列出具有不同用户 ID 的最后 10 次提交?

python - Wagtail-ModelTranslation 模板片段缓存

python - 整个 python 应用程序中的单个数据库连接(遵循单例模式)

jquery - django 中的实时日志查看器

python - Django Rest Framework - 具有 "."、 "-"、 "_"字符的字段用户名

python - 自然键序列化以一对一字段为主键的Django模型

python - 如何记录 Django REST Swagger 2 中的参数?