为什么我的 django rest-framework 分页不起作用?

Why does my django rest-framework pagination does not work?

我有一个 Django Restframework 项目。 这是我的观点:

class JobView(viewsets.ReadOnlyModelViewSet):
    queryset = Job.objects.all()
    serializer_class = JobSerializer
    filter_backends = [filters.OrderingFilter, DjangoFilterBackend, filters.SearchFilter]
    search_fields = [...]
    ordering_fields = ['jobId']
    ordering = ['-jobId']
    filterset_fields = ['jobId', 'status']
    pagination_class = StandardResultsSetPagination

和我的分页 class:

class StandardResultsSetPagination(LimitOffsetPagination):
    page_size = 1

视图在路由器中注册:

router.register(r'jobs', JobView)

问题是,它根本不分页。它只是忽略 pagination_class 属性。

我也试过:

class JobView(generics.ListAPIView)

并在没有路由器的情况下注册了视图。但问题是一样的。它不分页,只是 returns 一个包含所有工作的 json 列表。

如果不在settings.py全局为项目定义分页,如何在这个视图中实现分页?

您的 StandardResultsSetPagination 是否继承了正确的分页样式? LimitOffsetPagination does not limit the output by default (aside from the PAGE_SIZE setting) and requires query parameters to set the limit. It also does not have a page_size class attribute, contrary to PageNumberPagination.

只需尝试用以下代码替换您的分页 class

from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
    page_size = 5
    page_size_query_param = 'page_size'

如果你没有设置default_limit并调用/jobs,它会正常显示结果。在 LimitOffsetPagination 的情况下,您需要在请求中指定限制和偏移量或指定 default_limit 以查看差异。