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
相关产品推荐
相关产品推荐

