如何自定义Django管理站点中显示的过滤器名称?
比如说,如果我在几个外键上使用过滤器,代码看起来像这样:
list_filter = ['status', 'species__name', 'factor__name', 'factor__type', ]
那么在管理网站上,会有两个过滤器,它们的名字都显示为“名称”。
有没有人知道怎么解决这个问题?(也就是给它们不同的名字。)
我觉得 django.contrib.admin.SimpleListFilter
可能是个解决办法,但考虑到我有10多个像 xxx__name
这样的字段,可能会有点麻烦……
1 个回答
5
根据我的调试,我发现 /python2.7/dist-packages/django/contrib/admin/templates/admin/filter.html
这个模板负责显示与过滤器相关的内容。
在这个模板中,你可以找到
{% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}
这里每个过滤器的标题都是来自 filter_title
。
所以要获取 filter_title
的值,你可以去
/python2.7/dist-packages/django/contrib/admin/filters.py
。
在这里的 FieldListFilter
类中,你会看到它直接把 verbose_name 放进了 filter.title。
这里你有
list_filter = ['status', 'species__name', 'factor__name', 'factor__type', ]
你可以通过简单地给属于其他表并通过外键连接到你模型的字段提供一个可读的名称来解决你的问题。
#Home here home is first model name = models.CharField(verbose_name="Home status", --)
# Out here Out is second model name = models.CharField(verbose_name="out status", ---)
#Main this is main model home = models.ForeignKey(Home) out = models.ForeignKey(Out)
所以现在如果你使用过滤器,它会显示过滤器标题为 Home status 和 out status
。