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

Odoo 16调用report_action()后如何自定义报表文件名?

解决Odoo 16中.report_action()传data时自定义报表文件名失效问题

在Odoo 16中调用report_action()传递data参数时,会出现报表无法获取docids(记录ID)的情况,导致print_report_name配置中的object对象为空,自定义文件名失效,默认使用报表动作的字符串名称。

现有两种调用方式的矛盾点:

  • 不传data:报表可正常访问object生成自定义文件名,但无法传递额外业务数据
  • 传data:能传递额外数据,但object为空,自定义命名逻辑失效

解决方案

方法1:显式传入docids参数

调用report_action时手动指定docids,确保报表能获取到记录ID,无需修改报表定义:

for rec in self:
    return self.env.ref('inbound_route.report_inbound_pallets_list').report_action(
        rec, 
        data=create_dummy_pallets_list(rec),
        docids=[rec.id]
    )

此时原报表的print_report_name配置'%s_inbound_pallets_list' % (object.name)可正常生效。

方法2:在data中嵌入记录命名字段

将用于命名的记录字段(如name)加入data对象,修改报表的print_report_name从data中取值:

调用代码修改:
for rec in self:
    report_data = create_dummy_pallets_list(rec)
    # 把记录名称存入data
    report_data['record_name'] = rec.name
    return self.env.ref('inbound_route.report_inbound_pallets_list').report_action(rec, data=report_data)
报表定义修改:
<report 
    id="report_inbound_pallets_list"
    string="List of Inbound Pallets"
    model="stock.picking"
    report_type="qweb-pdf"
    name="inbound_route.inbound_pallets_list"
    file="inbound_route.inbound_pallets_list"
    print_report_name="'%s_inbound_pallets_list' % (data.get('record_name', 'unknown'))"
/>

方法3:重写报表的_get_report_values方法

通过继承报表抽象模型,确保object对象被正确传递,同时保留自定义data:

from odoo import models

class ReportInboundPalletsList(models.AbstractModel):
    _inherit = 'report.inbound_route.inbound_pallets_list'

    def _get_report_values(self, docids, data=None):
        report_values = super()._get_report_values(docids, data=data)
        # 若存在docids,手动注入object对象
        if docids:
            report_values['object'] = self.env['stock.picking'].browse(docids[0])
        return report_values

该方法无需修改原报表的print_report_name配置,object.name可正常使用。

内容的提问来源于stack exchange,提问作者jeremy k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:01:07