【问题标题】:Django Paginator change object_listDjango Paginator 更改 object_list
【发布时间】:2013-03-31 09:47:42
【问题描述】:

有没有办法在不创建新的 Paginator 的情况下更改 Paginator object_list?

我想订购我传递给分页器的查询集。

现在我正在基于有序查询集创建新的分页器。

谢谢

【问题讨论】:

  • order the queryset 是什么?
  • 没有用。我试过:page.object_list = page.object_list.order_by('name') 但没有做任何改变。
  • 真的不行。您必须在分页之前在查询中订购它
  • 所以没有办法重用分页器对象?这意味着我必须再次访问数据库并创建新的分页器,对吗?
  • 不,您不必再次访问数据库或再次创建新数据库。您可以在视图中发布您的代码

标签: django django-pagination


【解决方案1】:

好的,自从这个问题发布这么多年后,我将它放在了我的谷歌搜索命中列表的顶部。我刚刚做了一个简单的测试,证明可以将 paginator.object_list(以 Django QuerySet 开头)更改为字典列表,并且可以在模板中无缝工作。正如documentation 所说,object_list 可以是:“列表、元组、QuerySet 或其他具有 count() 或 len() 方法的可切片对象。”

因此可以通过这种方式重新排序列表,或者,正如我需要做的那样,可以从第二个数据库向字典中添加更多字段。您确实需要将替换列表的长度保持为与原始 QuerySet 相同的长度,以便使用 Paginator 对象的所有其他功能。使用 QuerySet 方法 values() 可以很容易地保留所有字段(感谢@David Wolever this tip

这里有一些代码:

new_object_list = list(records_from_paginator.object_list.values())
reordered_or_changed_object_list = reorder_or_change_object_list(new_object_list)
records_from_paginator.object_list = reordered_or_changed_object_list

【讨论】:

    猜你喜欢
    • 2018-05-18
    • 2018-05-07
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多