我正在将查询结果从数据库(结合3个模型)发送到我的一个模板,从而允许用户过滤输出。 在我尝试对结果进行分页之前,显示我想要的所有信息都可以正常工作。然后我得到空的QuerySet和下面的“第1页,共1页”。 由于未处理的集被提取到模板而没有任何干扰,这完全让我感到困惑。
这是我的views.py:
products =Product.objects.all()
out = Sets.objects.filter(
ItemInSet__item__name__in=Product.objects.filter(metrics=1).values_list('product_name', flat=True)
).exclude(
ItemInSet__item__name__in=Product.objects.filter(metrics=0).values_list('product_name', flat=True)
).distinct()
page = request.GET.get('page', 1)
paginator = Paginator(out, 10) # show 10 per page
try:
out_p = paginator.page(page)
except PageNotAnInteger:
out_p = paginator.page(1)
except EmptyPage:
out_p = paginator.page(paginator.num_pages)
return render(request, 'item_list.html', {'products': products, 'results': out_p})
还有我的模板:
<table id="id_item_list" >
{% if results.all %}
{% for result in results %}
<tr>
<form method="GET">
{% csrf_token %}
<ul>
<a href="/result/{{result.slug}} class="list-group-item list-group-item-action">
<h4>{{ result.name|title }}</h4>
<!-- and few more objects from Sets and ItemInSets etc. -->
</a>
</ul>
</form>
</tr>
{% endfor %}
{% else %}
<p>No Sets matched your criteria.</p>
{% endif %}
</table>
<div class="pagination">
<span class="step-links">
{% if results.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ results.previous_page_number }}">previous</a>
{% endif %}
<span class="current">Page {{ results.number }} of {{results.paginator.num_pages }}.</span>
{% if results.has_next %}
<a href="?page={{ results.next_page_number }}">next</a>
<a href="?page={{ results.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
</div>
结果为空,分页仅显示'第1页,共1页'。没有任何元素显示。当我通过没有分页的设置时( out )很好。 查询多个模型是否导致此问题? 我已经看到了使用itertools的方法,但是结合查询并不是我的直接问题。是吗?
编辑: 按照注释中提供的说明解决了该问题。 我已将分页数据视为QuerySet而不是Page来对待,这反过来又使我使用了不受支持的方法,并且没有显示任何结果。