DRF 自定义分页无法正常工作

DRF Custom Pagination not working properly

最近我在使用 drf 分页 class,PageNumberPagination.I 可能遇到也可能没有遇到一个奇怪的错误。 官方文档提到,要覆盖 PageNumberPagination 的页面大小,我们必须创建一个自定义分页器来覆盖页面大小配置,如下所示

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 100
    page_size_query_param = 'page_size'
    max_page_size = 1000
class BillingRecordsView(generics.ListAPIView):
    queryset = Billing.objects.all()
    serializer_class = BillingRecordsSerializer
    pagination_class = LargeResultsSetPagination

但是当我尝试做同样的事情时,自定义分页器使用默认设置 100 这是我使用的片段

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 100

class TrendingClassesView(ListAPIView):
    pagination_class = StandardResultsSetPagination
    serializer_class = BaseClassTileSerializer
    queryset = BaseClass.objects.all()

一会儿代码工作正常但是在调整页面大小一段时间后分页器停止工作, 我必须执行类似下面的操作才能使页面大小正常工作

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 100

    def get_page_size(self, request):
        return 10

这是我的休息框架设置

REST_FRAMEWORK = {
    'UPLOADED_FILES_USE_URL':
    True,
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.MultiPartParser',
        'rest_framework.parsers.FileUploadParser',
        'rest_framework.parsers.FormParser',
    ],
    "TIME_FORMAT":
    "%I:%M %p",
    "TIME_INPUT_FORMATS": ["%I:%M %p", "%H:%M"],
}

我想我可能做错了什么,但我找不到错误。

我没有发现自定义分页有任何错误,尽管您不必重写 get 方法。 尝试在设置中设置默认分页 class。

REST_FRAMEWORK = {
    'UPLOADED_FILES_USE_URL':
    True,
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.MultiPartParser',
        'rest_framework.parsers.FileUploadParser',
        'rest_framework.parsers.FormParser',
    ],
    "TIME_FORMAT":
    "%I:%M %p",
    "TIME_INPUT_FORMATS": ["%I:%M %p", "%H:%M"],
    'DEFAULT_PAGINATION_CLASS': 'your.path.StandardResultsSetPagination'
}

文档中也提到了它:DRF pagination

PS:请同时​​检查查询集和视图集,错误可能来自您正在获取结果的查询。

是的,这可能是愚蠢的,但无论如何我发现了问题。问题不在于给定的两个视图,所以我没有提供正确的信息 here.After 写上面的评论我开始寻找如果我在其他地方覆盖了页面大小 所以我找到了这个

class FocusView(ListAPIView):
    authentication_classes = (JWTAuthentication, TokenAuthentication,
                              SessionAuthentication, BasicAuthentication)
    permission_classes = (IsAuthenticated, IsCustomer, )
    renderer_classes = (
        JSONRenderer,
       
    )
    pagination_class = StandardResultsSetPagination
    serializer_class = FocusTileSerializer
    pagination_class.page_size=100 #this line was the culprit here

这个视图就在我上面使用的视图下面,所以当服务器重新加载时 python 加载所有模块和文件所以这个视图覆盖了自定义 [=16= 的 page_size ] 真的不知道它是否应该这样做,但它肯定应该在文档中提到,或者也许我错过了它。