You need to enable JavaScript to run this app. 使用redminelib获取Redmine键值型custom_fields实际取值的方法问询
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 22:54:05