Django rest framework 在djangorestframework中不请求任何页面时禁用分页

Django rest framework 在djangorestframework中不请求任何页面时禁用分页,django-rest-framework,Django Rest Framework,我为ListView API编写了如下的分页类 class PhotoListPagination(PageNumberPagination): page_size = 100 page_size_query_param = 'page_size' max_page_size = 10000 并在我的API视图中将其用作分页类: 当我向/link/to/my/API/end-point?page=1或任何其他页码发送GET请求时,它工作得非常好。当前,当页面没有值将请求发送到

我为ListView API编写了如下的分页类

class PhotoListPagination(PageNumberPagination):
   page_size = 100
   page_size_query_param = 'page_size'
   max_page_size = 10000
并在我的API视图中将其用作分页类:

当我向/link/to/my/API/end-point?page=1或任何其他页码发送GET请求时,它工作得非常好。当前,当页面没有值将请求发送到/link/to/my/API/end-point时,显示第1页。但是当我没有在请求中设置页面键时,我需要所有结果都不分页

可能吗

任何帮助都将不胜感激

您可以覆盖UserSinglePhotoAPIView中的list方法,并且仅当提供了page query param时才进行分页。否则返回所有

大概是这样的:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    if 'page' in request.query_params:
        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)
您可以在UserSinglePhotoAPIView中重写list方法,并且仅当提供了page query param时才进行分页。否则返回所有

大概是这样的:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    if 'page' in request.query_params:
        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)
这是泛型视图中的paginate_queryset方法

def paginate_queryset(self, queryset):
    """
    Return a single page of results, or `None` if pagination is disabled.
    """
    if self.paginator is None:
        return None
    return self.paginator.paginate_queryset(queryset, self.request, view=self
因此,如果此函数返回None,ListView将返回一个包含所有结果的页面,请按如下所示重写此方法:

class UserSinglePhotoAPIView(ListAPIView):
    ...
    ...
    def paginate_queryset(self, queryset):
        if self.paginator and self.request.query_params.get(self.paginator.page_query_param, None) is None:
            return None
        return super().paginate_queryset(queryset)
这是泛型视图中的paginate_queryset方法

def paginate_queryset(self, queryset):
    """
    Return a single page of results, or `None` if pagination is disabled.
    """
    if self.paginator is None:
        return None
    return self.paginator.paginate_queryset(queryset, self.request, view=self
因此,如果此函数返回None,ListView将返回一个包含所有结果的页面,请按如下所示重写此方法:

class UserSinglePhotoAPIView(ListAPIView):
    ...
    ...
    def paginate_queryset(self, queryset):
        if self.paginator and self.request.query_params.get(self.paginator.page_query_param, None) is None:
            return None
        return super().paginate_queryset(queryset)

谢谢,肯尼,这是我最好的解决方案。谢谢,肯尼,这是我最好的解决方案。