使用redminelib获取Redmine键值型custom_fields实际取值的方法问询
redminelib 获取枚举类自定义字段实际取值的操作方案
出现返回值为索引而非实际文本的情况,是Redmine工单接口的固有返回逻辑:对于下拉选择、多选这类枚举类型的自定义字段,接口本身就会返回枚举选项的内部ID作为value,redminelib仅原样透传接口数据,不会额外做文本转译。
要拿到对应的实际展示值,可按照以下步骤操作:
- 第一步:拉取目标自定义字段的完整元数据
枚举选项的键值映射关系存储在自定义字段的配置中,通过redminelib自带的自定义字段查询接口即可获取,参考代码:
拉取到的# 遍历全量自定义字段列表,匹配ID为109的字段定义 target_cf = next(cf for cf in redmine.custom_field.all() if cf.id == 109)target_cf对象包含possible_values属性,对应完整的枚举键值列表,每个条目固定携带两个信息:id:枚举选项的内部数字ID,也就是你在工单上拿到的索引值value:枚举选项对应的实际展示文本
- 第二步:基于索引匹配获取实际值
将工单上拿到的索引值,与枚举列表中的选项ID做匹配,即可得到对应的实际展示值,参考代码:# 获取工单上存储的字段索引 stored_index = issue.custom_fields.get(109).value # 遍历匹配得到实际展示文本 actual_value = next( opt["value"] for opt in target_cf.possible_values if str(opt["id"]) == str(stored_index) )
实用注意点
- 代码中做字符串强转比对,是为了兼容不同Redmine版本的类型返回差异:部分版本返回的存储索引是字符串格式,选项ID为整型,直接做严格类型比对会出现匹配失败
- 如果是多选类型的自定义字段,
stored_index本身为列表结构,只需将匹配逻辑套入列表推导,批量遍历每个索引值完成匹配即可 - 性能优化建议:自定义字段的枚举选项更新频率极低,可将拉取到的字段元数据做本地内存缓存,无需每次查询工单时都重复请求字段元数据接口
- 匹配时如果触发
StopIteration异常,说明对应的枚举选项已经被从自定义字段配置中删除了,这类场景Redmine会保留工单上的历史索引值,不会返回不存在的选项内容,可自行做兜底处理
内容的提问来源于stack exchange,提问作者Raoul Debaze
相关产品推荐
相关产品推荐

