Python 如何发送对象并获取该项在Django Rest框架分页中存在的相应页码?

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

如何使用对象id并获取该对象在
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)
还有其他方法吗?请在下面评论,因为我还在学习这些东西


谢谢大家!

你能分享你正在使用的模型和有序查询吗?谢谢你的回答!请你检查一下我写的以下答案,告诉我这样做是否可以。再次感谢!