在 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 中禁用多重排序的主要内容,如果未能解决你的问题,请参考以下文章
ADMIN_MEDIA_PREFIX 弃用和在 Django 1.4 中使用静态文件
Django 1.4 - ManyToMany 字段看起来像用户身份验证中的用户权限字段