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

如何在Django Admin中显示带choices的字段?

Django Admin 显示带Choices字段的解决方案

你遇到的问题是直接用字段名生成list_display时,带choices的CharField在Admin列表里显示的是原始存储值(比如状态码),而非choices对应的可读文本。可以通过以下两种方式修改生成逻辑:

方法一:直接利用Django内置的显示方法

Django会自动为带choices的字段生成get_xxx_display()方法,我们可以直接把这个方法名加入list_display:

class EventAdmin(admin.ModelAdmin):
    list_display = []
    for field in Event._meta.get_fields():
        # 跳过非数据库字段(比如反向关联、多对多中间字段)
        if not field.concrete:
            continue
        # 判断字段是否有有效的choices配置
        if hasattr(field, 'choices') and field.choices:
            list_display.append(f"get_{field.name}_display")
        else:
            list_display.append(field.name)

这种方式简单直接,但列表列标题会默认显示为Get [字段名] Display,如果需要自定义标题,可以用方法二。

方法二:动态生成带自定义标题的显示方法

通过动态创建显示方法,同时设置列的友好标题:

class EventAdmin(admin.ModelAdmin):
    def __init__(self, model, admin_site):
        super().__init__(model, admin_site)
        self.list_display = []
        for field in model._meta.get_fields():
            if not field.concrete:
                continue
            if hasattr(field, 'choices') and field.choices:
                # 定义生成显示方法的闭包
                def create_display_func(field_name, verbose_name):
                    def display_func(obj):
                        return getattr(obj, f"get_{field_name}_display")()
                    display_func.short_description = verbose_name or field_name
                    return display_func
                
                # 生成方法名并绑定到Admin实例
                display_method = f"show_{field.name}"
                setattr(self, display_method, create_display_func(field.name, field.verbose_name))
                self.list_display.append(display_method)
            else:
                self.list_display.append(field.name)

关键说明

  • field.concrete用于过滤掉非数据库存储的字段(比如反向关联字段),避免Admin列表出现错误
  • get_xxx_display()是Django内置方法,会返回choices中对应的可读文本,无需自己处理映射逻辑
  • 动态方法的short_description会设置列表列的显示标题,优先使用字段的verbose_name,没有则用字段名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:27:14