Python 如何将查询中设置的页面大小放入分页元数据django rest框架
我已经为我的一个应用程序设置了自定义分页,我面临的问题是页面大小仅显示应用程序中设置的默认值,但不会根据查询参数中发送的值进行更改。我哪里做错了Python 如何将查询中设置的页面大小放入分页元数据django rest框架,python,django,django-rest-framework,Python,Django,Django Rest Framework,我已经为我的一个应用程序设置了自定义分页,我面临的问题是页面大小仅显示应用程序中设置的默认值,但不会根据查询参数中发送的值进行更改。我哪里做错了 class CustomPagination(PageNumberPagination): page_size = 10 page_size_query_param = 'page_size' def get_paginated_response(self, data): return Response({"s
class CustomPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
def get_paginated_response(self, data):
return Response({"status": True,
"data": {
'results': data,
"meta": {
'page_count':self.page.paginator.num_pages,
'total_results': self.page.paginator.count,
'current_page_no': self.page.number,
'limit': self.page_size,
'last_page': self.page.has_next()
}}},
status=status.HTTP_200_OK)
页面大小的输出总是10,即使我将查询参数设置为不同的值。例如:如果用户在查询参数中设置了page_size=2,则应更改为2
编辑:
视图的代码
class ListPCAPIView(ListAPIView):
serializer_class = ListPCSerializer
def get(self, request):
user = self.request.user
pc = Pc.objects.filter(
user_id=user).order_by('pc_name')
if pc:
page = self.paginate_queryset(pc)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
else:
raise CustomException(
detail="pc list is empty.",
status_code=status.HTTP_400_BAD_REQUEST)
paginate_queryset()
将请求作为其第二个位置参数。需要请求
,以便从中获取页面大小
您没有传递请求
,因此我很想理解为什么视图能够工作——因为Python应该由于参数数量不正确而引发类型错误
无论如何,请尝试更新代码以将请求
作为第二个参数传递:
page = self.paginate_queryset(pc, request)
有一种方法可以帮助您实现这一点<代码>获取页面大小(请求)
是,您需要传入原始请求。幸运的是,您可以通过self.request
def get_paginated_response(self, data):
print(self.get_page_size(self.request))
....
此外,要获得所需的总页数,请按当前页面大小和记录计数
可以做到以下几点
import math
math.ceil(self.page.paginator.count / self.get_page_size(self.request))
希望这有帮助您是否在
settings.py
中设置了DEFAULT_PAGINATION_CLASS
以指向您的CustomPagination
类?或者您是直接从视图调用CustomPagination
API?如何在API视图子类中使用CustomPagination类?你能添加代码吗?@WillKeeling我在settings.py.中设置了默认的分页类,@Rudolf Olah我在编辑中添加了代码。谢谢你的解决方案,我按照你的建议添加了请求参数,这为我触发了类型错误,TypeError:paginate_queryset()接受2个位置参数,但给出了3个
?您是否在任何地方重写了paginate_queryset()
?啊,我的错误,您确实用一个参数正确调用了该方法。GenericAPIView
(超类)为您添加了第二个参数!但是如何在自定义分页类中访问它?正如我的显示名所说,m仍然是一个noob XD,分页类将根据您在settings.py
中设置的内容自动应用。您是否能够使用设置.py更新您的问题?特别是REST\u框架
部分,其中包含默认分页类
。