Skip to main content
 首页 » 编程设计

python之如何自定义显示在 Django 管理站点中的过滤器名称

2024年08月27日30exmyth

例如,如果我像这样对多个外键使用过滤器:

list_filter = ['status', 'species__name', 'factor__name', 'factor__type', ] 

将有两个过滤器,其名称在管理站点上显示为“名称”。

有没有人知道如何解决这个问题? (通过给他们不同的名字。)

我认为 django.contrib.admin.SimpleListFilter 可能是一个解决方案,但考虑到我有 10 多个字段,例如 xxx__name。可能有点笨拙..

请您参考如下方法:

根据我的调试,我发现 /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 and out status