Odoo15 QWeb-PDF条件合并子报表实现问题求助
Odoo报表合并问题修复建议
核心问题排查与修复步骤
- 变量未传递:
checkuppaper_bool需要在报表的Python逻辑(如_get_report_values方法)中定义并传入模板上下文,否则模板无法识别该变量。 - 搜索条件错误:
search里的'partner_id'是字符串常量,要替换为当前订单的合作伙伴ID,即order_doc.partner_id.id,否则查不到对应数据。 - 子模板数据传递错误:直接在
t-call内部写t-foreach无法正确传递上下文给子模板,应先获取检查单数据,再传递给子模板。 - 变量命名冲突:外层循环已用
doc作为订单变量,内层循环要换个变量名,避免上下文混乱。
修改后的模板代码示例
<template id="a_report_order"> <t t-call="web.html_container"> <t t-foreach="docs" t-as="order_doc"> <t t-call="web.internal_layout"> <div class="page"> <!-- 原订单报表内容 --> </div> <t t-if="checkuppaper_bool"> <!-- 获取当前订单对应的检查单数据 --> <t t-set="checkup_docs" t-value="self.env['a.checkup'].search([('partner_id', '=', order_doc.partner_id.id)])"/> <!-- 将数据传递给子模板 --> <t t-call="a.b_report_checkup" t-set="docs" t-value="checkup_docs"/> </t> </t> </t> </t> </template>
额外注意事项
- 确保报表Python控制器中,把
checkuppaper_bool加入_get_report_values的返回字典,示例:
def _get_report_values(self, docids, data=None): docs = self.env['sale.order'].browse(docids) # 根据业务逻辑设置checkuppaper_bool的值 checkuppaper_bool = self._check_need_checkup(docs) return { 'doc_ids': docids, 'docs': docs, 'checkuppaper_bool': checkuppaper_bool, }
- 检查子模板
a.b_report_checkup结构,确保它能处理传入的docs变量,通常子模板会用t-foreach="docs" t-as="doc"循环渲染内容。 - 若子模板是独立报表,要去掉外层的
web.html_container和web.internal_layout,只保留内容片段,避免重复渲染页面结构。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

