Django多个查询集分页为一个

时间:2011-11-18 17:44:18

标签: django pagination

您好我正在构建一个搜索结果页面,该页面结合了多个数据库中的多个查询集,我想将它们作为一组进行分页。

在我看来,我有:

def combined_search(request):
    ...
    first_query_set = Mytable_db1.objects.select_related().filter(q)
    first_count = first_query_set.count

    second_query_set = Mytable_db2.objects.select_related().filter(q)
    second_count = second_query_set.count
    # combine querysets
    combined_query_set = list(chain(first_query_set, second_query_set))

    # create a new paginator instance with items-per-page
    paginator = Paginator(combined_query_set, 5)
    # get the page number from a get param if param is blank then set page to 1 
    page = int(request.GET.get('page', '1')) 
    # grab the current page from the paginator...  
    items = paginator.page(page)
    ...

然后在我的模板中我想要类似的东西:

<h1>{{ first_count }} results in mydb1:</h1>
{% for x in first_query_set %}
     <p>{{ x.field }}</p>
{% endfor %}


<h1>{{ second_count }} results in mydb2:</h1>
{% for y in second_query_set %}
     <p>{{ y.field }}</p>
{% endfor %}

问题在于我想要将两个集合分页,就好像它们是一个但包括标题一样。因此,如果第一组只有2个结果,第二组只有18个结果,则第一组(包括标题)只出现在第一页上,而第二组又有3个页面。

1 个答案:

答案 0 :(得分:2)

您需要单独对查询集进行分页,然后将请求中的页码映射到相应的分页器。

这样的事情:

page = int(request.GET.get('page', '1'))
first_set_page_count = math.ceil(first_count / 5)
if page > first_set_page_count:
    page = page - first_set_page_count
    items = second_paginator.page(page)
else:
    items = first_paginator.page(page)