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

如何在DRF GenericAPIView中启用分页?全局配置未生效

解决DRF GenericAPIView全局分页配置不生效的问题

嘿,我之前切换到GenericAPIView的时候也踩过这个分页的坑!先给你捋清楚为啥全局配置没生效,以及对应的解决办法:

可能的原因1:手动重写视图方法,没走DRF分页流程

如果你的GenericAPIView子类是自己编写get/post方法,而非复用DRF封装好的列表逻辑,那即便全局配置了分页,DRF也不会自动处理。比如这种写法就不会生效:

class MyModelView(GenericAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

这时候需要手动调用DRF的分页方法,修改成这样:

def get(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)

可能的原因2:未使用GenericAPIView的封装子类

DRF其实已经封装好了自带分页逻辑的视图子类,比如ListAPIView——直接继承这个类的话,全局分页配置会自动生效,根本不用自己写get方法:

from rest_framework.generics import ListAPIView

class MyModelView(ListAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

这种写法下,你在settings.py里的全局配置会直接生效,默认每页返回5条数据。

类属性pagination_class的正确用法

你后来尝试在类里定义pagination_class,这个属性是用来覆盖全局配置的。比如某个视图需要使用不同的分页类(比如LimitOffsetPagination),或者单独设置该视图的分页规则时,才需要添加这个属性:

from rest_framework.pagination import LimitOffsetPagination

class MyModelView(ListAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    # 覆盖全局分页类,使用偏移量分页
    pagination_class = LimitOffsetPagination

最后检查全局配置的正确性

确认settings.py里的配置没有拼写错误:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 5
}

分页类的路径和名称必须准确,否则DRF找不到对应的分页实现,配置自然不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:19