Python操作Redmine:如何通过主题名称查找并修改工单内容(解决权限报错及API限制问题)
Python操作Redmine:如何通过主题名称查找并修改工单内容(解决权限报错及API限制问题)
嘿,我来帮你搞定这个问题!你现在碰到的两个核心困扰:一是调用redmine.issue.all()触发的权限报错,二是不知道怎么绕开"只能用ID查工单"的限制对吧?咱们一步步来解决。
先聊聊为什么你原来的代码会报错
你遇到的ForbiddenError,本质是因为redmine.issue.all()需要查看系统内所有工单的权限,Redmine出于安全考虑,默认不会给普通用户开放这个权限。而且就算你拿到了权限,当工单数量多的时候,这个方法会拉取所有数据,效率低到离谱,完全不适合用来找特定工单。
正确姿势:用Redmine过滤API代替全量遍历
Redmine的API支持直接按条件筛选工单,不用咱们自己遍历所有数据,让服务器帮忙做筛选,既省权限又高效。修改你的查找函数如下:
import re # 需要精确匹配时用到 def get_redmine_issue_by_subject(subject): """通过主题名称查找Redmine工单""" try: # 方式1:模糊匹配(主题包含该字符串的工单都会返回) # matching_issues = redmine.issue.filter(subject=subject) # 方式2:精确匹配(只有主题完全一致的工单才返回,推荐用这个避免多匹配) # re.escape用来转义主题里的特殊字符,防止正则出错 exact_subject_pattern = f"~*^{re.escape(subject)}$" matching_issues = redmine.issue.filter(subject=exact_subject_pattern) # 返回第一个匹配的工单,若有多个可返回列表或做其他处理 return matching_issues[0] if matching_issues else None except Exception as e: print(f"查找工单时出错: {str(e)}") return None
找到工单后怎么修改内容
拿到工单对象后,直接修改对应的属性,调用save()方法就能提交修改,比如修改描述或主题:
# 替换成你要找的工单主题 target_subject = "你的目标工单主题" issue = get_redmine_issue_by_subject(target_subject) if issue: # 示例1:修改工单描述 issue.description = "这是更新后的工单描述内容" # 示例2:修改工单主题 # issue.subject = "更新后的工单主题" # 保存修改到Redmine issue.save() print("工单修改成功!") else: print("没有找到匹配主题的工单哦")
几个关键注意事项
- 权限配置:确保你的Redmine API用户拥有查看目标工单和编辑工单的权限,在Redmine后台的用户权限设置里,要给对应项目配置好权限。
- 多匹配处理:如果系统里有多个主题相同的工单,上面的代码会返回第一个,你可以根据需求改成返回所有匹配的列表,或者让用户手动选择ID。
- API版本兼容:不同版本的Redmine API可能有细微差异,如果过滤参数不生效,可以检查下你的Redmine版本对应的API文档,调整过滤条件。
备注:内容来源于stack exchange,提问作者user25336067
相关产品推荐
相关产品推荐

