【发布时间】:2020-03-03 10:02:08
【问题描述】:
我有一些看起来像这样的代码。
page_objects = Page.objects.exclude(lorem).filter(blah).annotate(key=bar).order_by(foo)
paginator = Paginator(page_objects, 50)
在我的 UI 上,我注意到对于某些 bar 值,我在输出中缺少行。我跑了
将分页器的输出与查询的输出进行比较的实验。
page_results = []
for page_number in paginator.page_range:
result = paginator.page(page_number)
page_results += result.object_list
paginator_ids = sorted([x.id for x in page_results])
page_object_ids = sorted(x.id for x in list(page_objects))
print(paginator_ids == page_object_ids) => FALSE
print(len(paginator_ids) == len(page_object_ids)) => TRUE
如您所见,查询中的对象列表和分页器中所有对象的列表不匹配。我目视检查了列表以确认这是正确的(两个列表中的 id 明显不同)。
我在Django==1.11.3
发生了什么,为什么我的分页器的行为不像文档?
有趣的是,如果我将order_by 更改为order_by(foo, 'id'),分页器的行为与预期相同。
【问题讨论】:
标签: python django pagination django-pagination