You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:24:27