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

Django中如何获取Choice字段的实际显示值

解决Django Choice字段在模板显示存储值的问题

嘿,这个问题我太熟悉了!Django的Choice字段默认存在数据库里的是短代码(比如p、a、c),要拿到对应的友好显示文本,得用Django自动为这类字段生成的专属方法。

这里给你两种最常用的解决方式:

  • 直接在模板中调用生成方法
    假设你的模型字段定义是这样的:

    class Committee(models.Model):
        COMMITTEE_STATUS = (
            ("p", "Pending"),
            ("a", "Active"),
            ("c", "Completed"),
        )
        status = models.CharField(max_length=1, choices=COMMITTEE_STATUS)
    

    那在模板里,不要直接写{{ committee.status }}(这会输出p/a/c),而是用{{ committee.get_status_display }}——这个get_<字段名>_display()方法是Django自动帮你生成的,专门用来返回Choice里对应的显示文本。

    举个循环展示的例子:

    {% for committee in committees %}
        <div>
            委员会名称: {{ committee.name }}
            状态: {{ committee.get_status_display }}
        </div>
    {% endfor %}
    
  • 如果在视图中提前处理(可选)
    要是你想在视图里就把显示文本准备好再传给模板,也可以调用同一个方法:

    def committee_detail(request, pk):
        committee = Committee.objects.get(pk=pk)
        context = {
            'committee': committee,
            'status_text': committee.get_status_display()
        }
        return render(request, 'detail.html', context)
    

    然后模板里直接用{{ status_text }}就行,但其实更推荐第一种方式,因为Django的模板方法已经足够简洁。

需要注意的点:

  • 方法名里的<字段名>要和你模型里的字段完全一致,比如字段叫committee_status,那方法就是get_committee_status_display,别写错大小写哦!
  • 如果是从QuerySet里取的实例,每个实例都能直接调用这个方法,不用额外处理。

内容的提问来源于stack exchange,提问作者Muhammad Adeel Irshad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:23:13