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

如何用Django常量类替换字典中的状态值为可读文本?

解决Django中替换状态值为可读文本的问题

嘿,我明白你想把聚合查询返回的状态码,替换成ArticleStatus常量类里定义的友好可读文本,这里有几种实用的方法可以实现:

方法一:从CHOICES生成映射字典(推荐)

既然你已经在常量类里定义了CHOICES,直接用它生成键值对映射是最省心的——这样后续如果CHOICES有修改,不用额外维护映射关系,完全保持同步:

# 从CHOICES生成「状态值→可读文本」的映射字典
status_map = dict(ArticleStatus.CHOICES)

# 遍历结果列表,替换每个item的status值
updated_total = []
for item in context['total']:
    # 先复制原字典避免修改原数据
    updated_item = item.copy()
    # 用映射替换,未知状态则保留原值(防止KeyError)
    updated_item['status'] = status_map.get(item['status'], item['status'])
    updated_total.append(updated_item)

# 把更新后的结果放回context
context['total'] = updated_total

方法二:直接硬编码映射(适合固定场景)

如果你的状态几乎不会变动,也可以直接写个简单字典,代码更简洁:

status_map = {
    ArticleStatus.OPEN: 'Open',
    ArticleStatus.CLOSED: 'Closed',
    ArticleStatus.BLOCKED: 'Blocked',
}

# 用列表推导式快速替换
context['total'] = [
    {'status': status_map[item['status']], 'total': item['total']}
    for item in context['total']
]

小提醒

  • 优先选第一种方法,它能保证映射和CHOICES完全一致,避免后续修改状态时出现不一致的问题。
  • 如果担心出现未知的状态值,记得用dict.get()方法(像第一种方法那样),这样即使遇到没定义的状态,也不会抛出KeyError,而是保留原状态值。

处理后你的context['total']会变成:

[
    {'status': 'Open', 'total': 102},
    {'status': 'Closed', 'total': 150},
    {'status': 'Blocked', 'total': 24}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:24