You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Django Rest Framework分页不生效,如何单独为视图配置分页?

问题排查及解决步骤

按照如下优先级逐一排查修复即可:

1. 检查是否自定义list方法跳过了分页逻辑

如果你在JobView中重写了list方法,直接返回序列化结果没有调用父类的分页逻辑,就会导致分页完全失效。正确的自定义list方法写法必须保留分页处理:

from rest_framework.response import Response

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

    # 若需自定义list方法,必须保留以下分页逻辑
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        # 调用分页处理
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        # 无分页场景的返回
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

如果没有自定义list方法可以跳过该步骤。

2. 补全自定义分页类的配置

你当前的分页类仅配置了page_size属性,LimitOffsetPagination的分页大小优先级是请求limit参数 > 类的default_limit属性 > 全局配置,补全配置避免参数覆盖导致失效:

from rest_framework.pagination import LimitOffsetPagination

class StandardResultsSetPagination(LimitOffsetPagination):
    # 每页默认返回数量
    default_limit = 1
    # 允许前端自定义的每页最大数量,不需要可设为None
    max_limit = 100
    # 显式指定分页参数名,和前端传参保持一致即可
    limit_query_param = 'limit'
    offset_query_param = 'offset'

3. 确认基础配置无冲突

  • 确认JobView类没有设置pagination_class = None覆盖分页配置
  • 确认settings.py中没有设置DEFAULT_PAGINATION_CLASS = None全局关闭分页功能,不需要全局配置分页类,不设置该参数即可
  • 只有GET请求访问列表路径/jobs/才会触发分页,详情路径/jobs/{id}/本身不会分页
  • 如果是@action装饰器自定义的接口,需要手动调用上述list方法中的分页逻辑

生效验证

发起GET请求访问/jobs?limit=1,返回结果包含count、next、previous、results四个字段,results内仅返回1条数据即代表分页生效。

内容的提问来源于stack exchange,提问作者EinEsellesEniE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:39:03