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

Django中如何获取模型/表单选项的显示名称而非存储值?

Django 快速获取选项的用户可读名称

在Django里定义模型或表单的选项时,一般会这么写:

EXP_CHOICES = (
    ('1ST','First'),
    ('2ND','Second'),
    # ... 其他选项
    ('XXX','YYY'),
)
# 注:XXX是存在数据库中的值,YYY是表单展示给用户看的可读名称

查询模型后拿到的是'1ST'、'2ND'这类数据库存储值,但不想用下面这种繁琐的模板条件判断来显示对应的可读名称,有没有更直接的办法?

{% if data.chosen == '1ST'%}
First
{% elif ... %}
...
{% endif %}

方法一:用模型内置的get_<字段名>_display()方法

这是Django官方提供的最省心的方案,只要你的模型字段是通过choices参数定义的,比如:

class YourModel(models.Model):
    chosen = models.CharField(max_length=10, choices=EXP_CHOICES)

不管是在模板还是Python代码里,都能直接拿到显示名称:

  • 模板中直接调用:
    {{ data.get_chosen_display }}
    
  • Python代码(视图/脚本)中调用:
    obj = YourModel.objects.get(id=1)
    display_name = obj.get_chosen_display()
    

方法二:手动转成字典映射

如果不想用内置方法,也可以把选项元组转成字典,通过键直接取值:

EXP_CHOICES_DICT = dict(EXP_CHOICES)
  • Python代码里使用:
    # 取不到对应值时,返回原字段值作为兜底
    display_name = EXP_CHOICES_DICT.get(obj.chosen, obj.chosen)
    
  • 模板中使用的话,需要先把这个字典传到模板上下文,然后:
    {{ exp_choices_dict|get:data.chosen }}
    
    (注:这里需要用到get模板过滤器,若项目未启用,也可以用exp_choices_dict[data.chosen],但取不到值时会报错,建议搭配默认值处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:33:28