【问题标题】:Django Pagination on a Changing Queryset更改查询集上的 Django 分页
【发布时间】:2011-03-22 23:53:20
【问题描述】:

在我的一个页面上,我想显示已排序的对象列表的一个子集。相关对象的整个列表非常长,并且在用户查看页面时很有可能发生更改。我不介意页面不是最新的,但我确实需要确保当用户转到下一页时,用户将看到原始排序列表中的下 n 个对象。因此,由于可能更改的数据,使用 django 的内置分页或像 Django-endless-pagination 这样非常好的库在转到“下一页”时不会返回正确的结果。

举个例子来说明我的意思,假设我们有对象 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 并且希望每页显示 5 个,排序从小到大。第一页看起来像:

1、2、3、4、5。

但是在查看此页面时,3 和 4 被删除了。如果我们进入“下一页”,分页会重新查询集合并返回:

8、9、10、11、12

我意识到这是分页的预期行为,但我想要一种简单的方法来显示下一页:

6、7、8、9、10

最明显的解决方案是做一些客户端分页,我意识到有一个nice jquery library,但是对象的数量可能太大,这个解决方案不现实。

是否有一种简单的方法可以对查询集进行分页并继续使用从该原始查询集返回的结果,而不是重新获取可能已更改的查询集?

感谢您提供的任何见解!

【问题讨论】:

    标签: python django pagination


    【解决方案1】:

    可能的解决方案是,如果您创建自己的分页函数,而不是指向某个页面的下一个链接,它可以传递一个记录,该记录是下一页的顶部记录

    问题在于,这只有在添加/更改的项目只是列表中的第一个项目时才有效

    【讨论】:

    • +1 提供一个很好的建议并指出它的缺陷。类似地,我可以将顶部记录的值存储在下一页上并获取之后的所有结果。
    • 我会将其标记为已接受,因为您是唯一可以帮助我解决此问题的人,而且您的建议非常好。所以,谢谢!
    • 是的,这或多或少是我很乐意提供帮助的意思,感谢您的投票(意味着我现在可以评论和投票了:))
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2022-12-18
    • 2015-03-17
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多