django admin中外键过滤器的List_filter标签总是按id排序,当列表中有很多过滤器时,这会导致相当混乱。
我一直在寻找简单的解决方案,如何按字母顺序或按日期订购这些标签一段时间。似乎除了使用FilterSpec之外,没有解决方案。
直到我这样做。
我已经更改了filter.html的模板(把它放在模板目录的admin文件夹中)所以它看起来像这样(我想在django片段的某个地方找到它):
{% load i18n %}
<h3>{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}</h3>
<div align="right">
<select onChange="javascript:window.location = this.options[this.selectedIndex].value;" style="width: 80%">
{% for choice in choices %}
<option {% if choice.selected %}selected{% endif %} value="{{ choice.query_string|iriencode }}">
{{ choice.display }}
</option>
{% endfor %}
</select>
</div>
然后我在for循环上使用'dictsort:'name“'模板标签,所以模板最终看起来像这样:
{% load i18n %}
<h3>{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}</h3>
<div align="right">
<select onChange="javascript:window.location = this.options[this.selectedIndex].value;" style="width: 80%">
{% for choice in choices|dictsort:"display" %}
<option {% if choice.selected %}selected{% endif %} value="{{ choice.query_string|iriencode }}">
{{ choice.display }}
</option>
{% endfor %}
</select>
</div>
我使用了select下拉,因为我有很多标签,但它也可以在标准的'ul'列表中使用。现在我终于按字母顺序排列了所有基于外键的过滤器(即使使用日期也能正常工作)。
如果你需要反向剂量,那就有dictsortreversed模板标签。
希望这有助于某人。
答案 0 :(得分:0)
错误,问题本身就包含了答案。很抱歉没有更好地构建它。