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

Django REST Framework中APIView实现分页功能的解决方法

解决方法

DRF的全局分页配置仅对GenericAPIView及其子类生效,基础APIView不会自动触发分页逻辑,可通过以下两种方案实现需求:

方案1:更换父类为GenericAPIView(推荐)

修改views.py的代码如下,即可直接复用你在settings.py中的分页配置:

from rest_framework.generics import GenericAPIView
# 原有导入保持不变

class BookListView(GenericAPIView):
    serializer_class = SalerListSerializer
    # 若需要单独给这个接口设置单页数量,可取消下一行注释
    # pagination_class = PageNumberPagination # 替换为你实际使用的分页类
    # page_size = 10

    def get(self, request):
        author = set([item.get('ID') for item in Author.objects.values('ID').all()])
        saler = set([item.get('name') for item in Saler.objects.values('name').all()])
        if author:
            salers = Saler.objects.filter(name__in=list(saler - author))
        else:
            salers = Saler.objects.all()
        # 调用分页方法处理查询集
        page_salers = self.paginate_queryset(salers)
        serializer = self.get_serializer(page_salers, many=True)
        # 返回分页格式的响应
        return self.get_paginated_response(serializer.data)

注意:如果你需要单页展示10条,需要先把settings.py里的PAGE_SIZE配置从100修改为10。

方案2:基础APIView手动调用分页器

如果不想修改原有父类,可手动实例化分页类处理数据:

from rest_framework.pagination import PageNumberPagination # 替换为你settings中配置的分页类
# 原有导入保持不变

class BookListView(APIView):
    def get(self, request):
        author = set([item.get('ID') for item in Author.objects.values('ID').all()])
        saler = set([item.get('name') for item in Saler.objects.values('name').all()])
        if author:
            salers = Saler.objects.filter(name__in=list(saler - author))
        else:
            salers = Saler.objects.all()
        
        # 手动初始化分页器
        paginator = PageNumberPagination()
        paginator.page_size = 10 # 直接指定单页数量,不需要改全局配置
        page_salers = paginator.paginate_queryset(salers, request)
        serializer = SalerListSerializer(page_salers, many=True)
        return paginator.get_paginated_response(serializer.data)

两种方案实现后,Swagger页面都会自动识别分页参数,支持输入页码查询对应页面的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:54:03