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

