Odoo 15.0中action赋值与report_action方法无法触发报表下载
Odoo字段变更触发自动打印报表解决方案
核心问题分析
你之前的代码无效,主要是缺少要打印的具体记录ID(res_id),Odoo无法定位到需要生成报表的对象;另外自动化动作的上下文传递也存在缺失。
修正方案
方案1:完善动作字典(指定记录ID)
直接构建动作字典时,必须补充res_id和上下文参数,确保Odoo能识别目标记录:
# 假设record是当前触发变更的stock.quant.package记录 action = { 'type': 'ir.actions.report', 'name': 'Package Barcode (PDF)', 'model': 'stock.quant.package', 'report_type': 'qweb-pdf', 'report_name': 'stock.action_report_quant_package_barcode_small', 'res_id': record.id, # 关键:指定要打印的记录ID 'context': { 'active_id': record.id, 'active_ids': [record.id], 'force_download': True # 强制触发下载 } } return action
方案2:使用report_action方法(更简洁)
调用记录集的report_action方法,会自动处理记录ID和上下文,代码更简洁可靠:
# 获取当前触发变更的包裹记录 package = env['stock.quant.package'].browse(record.id) # 调用报表动作,传入正确的报表XML ID action = package.report_action( 'stock.action_report_quant_package_barcode_small', context={'force_download': True} ) return action
额外检查项
- 确认报表XML ID正确:进入
设置 > 技术 > 报表,查找对应报表的外部ID,确保stock.action_report_quant_package_barcode_small是正确的动作ID(而非报表模板ID) - 服务器动作配置:如果是“执行Python代码”类型的服务器动作,需勾选执行后返回动作选项,确保前端能接收并处理动作
- 上下文验证:确保触发动作时,当前环境能正确获取到
record对象(字段变更触发的动作中通常会自动传入)
内容的提问来源于stack exchange,提问作者Brendan Cariota
相关产品推荐
相关产品推荐

