Django模板中如何显示ChoiceField选项值而非存储键名
Django模板中渲染Choice字段可读值的方法
直接读取模型实例的Choice字段,只会返回数据库中存储的选项键(比如示例中的user_update),不会返回绑定的可读文本,正确的调用方式如下:
核心用法
在模板中使用Django为带choices参数的字段自动生成的get_<字段名>_display方法即可,对应你的字段,写法为:
{{ ticket.get_current_status_display }}
以上写法会自动匹配STATUS_CHOICES元组中对应键的可读值,当存储值为user_update时,会直接渲染出User updated ticket,不需要额外做选项映射。
原理说明
- 只要模型字段声明时传入了
choices参数,Django会自动为该字段生成get_字段名_display()的实例方法,方法内部会自动遍历选项元组,返回匹配存储值的可读标签 - 尝试使用
.value属性取值无效的原因是:传入模板的ticket是通过self.get_object()拿到的模型实例,不是表单实例。模型中存储Choice选项的字段本质是CharField,存储内容就是选项的键字符串,不存在.value属性,该属性是表单绑定字段的属性,不适用于直接取模型实例的场景。
效果验证
对应配置的STATUS_CHOICES元组,不同存储值的渲染结果对应如下:
- 存储值
new_ticket:渲染为New ticket submitted - 存储值
user_update:渲染为User updated ticket - 存储值
need_info:渲染为Need more information - 存储值
completed:渲染为Completed
该方法不需要修改现有表单、视图、模型的配置,直接在模板中替换变量名即可生效。
内容的提问来源于stack exchange,提问作者AustinNotAustin
相关产品推荐
相关产品推荐

