Python 如何发送对象并获取该项在Django Rest框架分页中存在的相应页码?
如何使用对象id并获取该对象在Python 如何发送对象并获取该项在Django Rest框架分页中存在的相应页码?,python,django,django-rest-framework,pagination,Python,Django,Django Rest Framework,Pagination,如何使用对象id并获取该对象在django rest framework中分页的所有页面上所属的相应页码 我在这里尝试的是使用django rest框架进行某种反向分页 是否有任何方法可以从分页的所有页面计算特定对象所属的页码,并将其与对象一起显示(如在序列化程序中) 任何答案都很好! 谢谢大家! 您可以对显示在对象之前的所有结果进行计数,然后将该数字除以页面大小,得到对象将显示的页面 obj = Model.objects.get(attr=value) queryset = Model.ob
django rest framework
中分页的所有页面上所属的相应页码
我在这里尝试的是使用django rest框架
进行某种反向分页
是否有任何方法可以从分页的所有页面计算特定对象所属的页码,并将其与对象一起显示(如在序列化程序中)
任何答案都很好!
谢谢大家! 您可以对显示在对象之前的所有结果进行计数,然后将该数字除以页面大小,得到对象将显示的页面
obj = Model.objects.get(attr=value)
queryset = Model.objects.order_by('pk')
num_preceeding_results = Model.objects.filter(pk__lt=obj.pk).count()
page = num_preceeding_results // page_size + 1
我想要
drf
pagination为我提供特定对象所属的整个页面(以及其他对象)。因此,我在rest framewok
pagination.PageNumberPagination
中重写了paginate\u queryset
方法,以实现我想要的功能,这很有效。所以我想把它也贴在这里
就我而言,我有帖子和答案,后面是这些帖子。我需要的是在url中为答案id提供一个查询参数,该参数给出了该特定答案和其他答案所在的整个页面。基本上这类似于反向分页
因此,如果我输入以下url,我将获得图像中显示的结果
URL:http://localhost:8000/answer_api/?postBelong=1&answer=164
因此,我们不需要在url中输入页码。只有答案id就足够了,它给出了整个页面
这是我否决的代码
def paginate_queryset(self, queryset, request, view=None):
"""
Overriding the method to get an entire page which a particular answer is belonged,
as asked by the user in the query parameter 'answer'
"""
answer_id = request.query_params.get('answer', None)
post_belong = request.query_params.get('postBelong', None)
'''here it calculates the corresponding page number where does the answer_id belong'''
page_num = 1
try:
answers = queryset.filter(postBelong=post_belong)
for index, answer in enumerate(answers):
if str(answer.id) == str(answer_id):
page_num = index // ANSWERS_PER_PAGE + 1
except Exception as exp:
msg = str(exp)
raise NotFound(msg)
page_size = self.get_page_size(request)
if not page_size:
return None
paginator = self.django_paginator_class(queryset, page_size)
page_number = request.query_params.get(self.page_query_param, page_num) # changed here as the page_num
if page_number in self.last_page_strings:
page_number = paginator.num_pages
try:
self.page = paginator.page(page_number)
except InvalidPage as exc:
msg = self.invalid_page_message.format(
page_number=page_number, message=str(exc)
)
raise NotFound(msg)
if paginator.num_pages > 1 and self.template is not None:
# The browsable API should display pagination controls.
self.display_page_controls = True
self.request = request
return list(self.page)
还有其他方法吗?请在下面评论,因为我还在学习这些东西
谢谢大家! 你能分享你正在使用的模型和有序查询吗?谢谢你的回答!请你检查一下我写的以下答案,告诉我这样做是否可以。再次感谢!