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页面:
。或者我有什么不对劲?