You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin列表过滤器自定义BooleanField显示名称的问题

Django Admin中BooleanField choices在列表过滤器不生效的原因及解决办法

原因

Django Admin的列表过滤器默认使用BooleanFieldListFilter,这个过滤器并没有读取模型字段设置的choices参数,它的选项文本是硬编码的“全部/是/否/未知”。而详情页和列表页显示字段值时,会调用字段自动生成的get_<field_name>_display()方法,这个方法会读取choices返回对应文本,所以这两个区域能正常显示自定义文本,过滤器却不行。

解决方法

自定义一个过滤器,继承默认的BooleanFieldListFilter,重写lookups方法来读取模型字段的choices生成选项:

步骤1:编写自定义过滤器

在app/admin.py中添加以下代码:

from django.contrib.admin.filters import BooleanFieldListFilter

class BuildingConditionFilter(BooleanFieldListFilter):
    def lookups(self, request, model_admin):
        # 直接读取模型字段的choices配置
        return model_admin.model._meta.get_field('is_new_building').choices

步骤2:在Admin类中使用自定义过滤器

修改FlatAdmin的list_filter配置,指定使用自定义过滤器:

class FlatAdmin(admin.ModelAdmin):
    list_filter = (('is_new_building', BuildingConditionFilter), )

这样列表过滤器的选项就会变成「全部/New/Old/Unknown」,和你在choices中定义的文本一致了。

内容的提问来源于stack exchange,提问作者Andrei Alekseev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:42:01