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

