You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

ODOO10 CE自定义PDF报表命名异常:print_report_name字段失效求助

解决Odoo 10 CE自定义PDF报表文件名不生效的问题

你遇到的这个问题,核心原因大多是XML配置冲突或者字段值格式不符合Odoo要求,下面给你两种可行的解决方案:

方案1:修正XML配置(推荐)

Odoo的<report>标签本身会自动生成对应的ir.actions.report.xml记录,你额外手动定义了同名id的记录,很容易导致配置被覆盖或不生效。直接把print_report_name属性加到<report>标签里即可,注意要把文件名用单引号包裹(因为Odoo会把该字段解析为表达式):

<report 
    id="action_report_as" 
    model="report_as" 
    string="Report AS_EE" 
    report_type="qweb-pdf" 
    name="report_as_ee.report_as" 
    paperformat="report.vertical_1"
    print_report_name="'mycorrectreportname.pdf'"
/>

如果需要根据记录动态生成文件名(比如用记录的名称),可以这样写:

print_report_name="'Report_' + object.name + '.pdf'"

记得删除你之前单独定义的<record id="action_report_as" model="ir.actions.report.xml">块,避免配置冲突。

方案2:在Python代码中重写文件名方法

如果XML配置还是不生效,你可以在报表的AbstractModel类中重写_get_report_filename方法,直接指定文件名:

class ReportAs(models.AbstractModel):
    _name = 'report.report_as_ee.report_as'

    @api.model
    def render_html(self, docids, data=None):
        # 你的原有代码
        self.model = self.env.context.get('active_model')
        docs = self.env[self.model].browse(self.env.context.get('active_id'))
        as_records = []
        # 填充as_records的代码
        docargs = {
            'doc_ids': self.ids,
            'doc_model': self.model,
            'docs': docs,
            'time': time,
            'as': as_records
        }
        return self.env['report'].render('report_as_ee.report_as', docargs)

    # 新增方法:自定义报表文件名
    @api.model
    def _get_report_filename(self, docids, data):
        # 返回固定文件名
        return "mycorrectreportname.pdf"
        # 若要动态生成,可根据docids获取对应记录:
        # record = self.env[self.model].browse(docids[0])
        # return f"Report_{record.name}.pdf"

为什么之前的配置不生效?

你手动创建了ir.actions.report.xml记录,但<report>标签已经自动生成了一条相同id的记录,Odoo加载配置时会出现覆盖或优先级问题,导致你自定义的print_report_name不被读取。另外,print_report_name字段需要是可解析的表达式,直接写字符串而不用单引号包裹的话,Odoo会把它当作字段名或变量,而非字面量字符串,这也会导致配置失效。

内容的提问来源于stack exchange,提问作者Joseph Vahde

火山引擎 最新活动