在 Django Admin >= 1.4 中禁用多重排序

Posted

技术标签:

【中文标题】在 Django Admin >= 1.4 中禁用多重排序【英文标题】:Disable multiple sort in Django Admin >= 1.4 【发布时间】:2013-05-04 07:02:43 【问题描述】:

我在 App Engine 上使用 Django Non Rel,在 Django Admin 中按多列排序的功能存在问题,因为我需要很多索引。 我想在 Django 1.3 中重新创建该行为,您在单击时只能按列排序。

我尝试了谷歌搜索和一切,但我找不到方法。

【问题讨论】:

【参考方案1】:

您正在谈论恢复此更改:https://code.djangoproject.com/ticket/11868。我不明白您所说的“我需要很多索引”是什么意思,所以我不明白您为什么要删除此功能。在 Django >1.4 中,您仍然“单击它时仅按一列排序” - 不同之处在于,如果您然后单击第二列,则当第一列的元素相同时,这将成为二次排序。

无论如何,如果由于某种原因您想恢复此功能,您可以尝试将 django/contrib/admin 目录的old version 添加到您的项目文件夹中,然后它将使用旧管理员。

【讨论】:

【参考方案2】:

没有“正确”的方法来做到这一点(在 1.4 中,不确定更高版本)

但是,在代码中禁用它非常简单。

编辑django/contrib/admin/templatetags/admin_list.py中的result_headers函数

在第 149 行,插入以下行(就在 yield 语句之前):

o_list_primary = [make_qs_param(new_order_type, i)]
o_list_toggle = [make_qs_param(new_order_type, i)]

为什么需要禁用多重排序功能?

当使用 django-nonrel(例如在 google app 引擎上)时,排序顺序的每个唯一组合都需要自己的索引。对于具有 5 个可排序列的列表,这需要超过每个实体允许的最大索引数(当前为 200)

【讨论】:

【参考方案3】:

将其添加到 % block object-tools % 内的“change_list.html”文件中

<script>
$(function()
    $('a[href^="?o="]').each(function()this.href=this.href.replace(/\..*/,''));

</script>

如果您没有加载 jQuery,则需要包含它。我建议包含在“base_site.html”中

【讨论】:

以上是关于在 Django Admin >= 1.4 中禁用多重排序的主要内容,如果未能解决你的问题,请参考以下文章

NoReverseMatch django 1.4 管理员

ADMIN_MEDIA_PREFIX 弃用和在 Django 1.4 中使用静态文件

装饰所有 django 管理视图 (1.4+)

Django 1.4 - ManyToMany 字段看起来像用户身份验证中的用户权限字段

django 1.4 timezone.now() 与 datetime.datetime.now()

django-admin和manage.py