Django rest framework Django Rest框架,列表路由操作的自定义页面大小

Django rest framework Django Rest框架,列表路由操作的自定义页面大小,django-rest-framework,Django Rest Framework,我有一个路线列表: @list_route(methods=['get']) def bought(self, request): bought_photos = Photo.objects.filter(is_bought=True) page = self.paginate_queryset(bought_photos) if page is not None: serializer = self.ge

我有一个路线列表:

    @list_route(methods=['get'])
    def bought(self, request):
        bought_photos = Photo.objects.filter(is_bought=True)

        page = self.paginate_queryset(bought_photos)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(bought_photos, many=True)
        return Response(serializer.data)
如何仅为列表路径而不是其ModelViewSet设置自定义页面大小

解决方案

1) 创建自定义分页类

from rest_framework.pagination import PageNumberPagination

class CustomPagination(PageNumberPagination):
    page_size = 10000
    page_size_query_param = 'page_size'
2) 编辑路线代码列表:

   @list_route(methods=['get'])
   def bought(self, request):
        bought_photos = Photo.objects.filter(is_bought=True)
        paginator = CustomPagination()

        page = paginator.paginate_queryset(bought_photos, request)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return paginator.get_paginated_response(serializer.data)
        serializer = self.get_serializer(bought_photos, many=True)
        return Response(serializer.data)

我认为以下代码应该足够了:

@list_route(methods=['get'], pagination_class=CustomPagination)
def bought(self, request):
    bought_photos = Photo.objects.filter(is_bought=True)

    page = self.paginate_queryset(bought_photos)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)
    serializer = self.get_serializer(bought_photos, many=True)
    return Response(serializer.data)

在“装饰者可以额外获取额外的参数,这些参数将仅为路由视图设置。例如…”一文中,我很惊讶地看到一些非常高级的主题和框架的隐藏特性的伟大答案。很遗憾,这个答案没有得到尊重。只需一句话:
page
应该是
list
类型,所以它不能是
None
,所以它将始终输入if子句。如果列表为空,则不应输入If子句,因此条件最好为
If页面:
。或者我有什么不对劲?