Odoo 15多公司环境下子模板无法访问主模板变量'o'的原因
Odoo 15多公司环境下发票PDF模板修改出现KeyError: 'o'的原因及解决方法
问题根源:
你修改的account.document_tax_totals子模板本身的标准上下文变量是document,而非o。主公司打印时能正常使用o,是因为调用该子模板的父模板(如account.report_invoice)刚好将o变量传递到了子模板的上下文中;但在多公司环境下,其他公司的报表调用逻辑或上下文传递规则存在差异,导致子模板上下文里没有o变量,从而抛出KeyError。修复方法:
将模板代码中的o替换为子模板的标准变量document即可,修改后的代码如下:<template id="document_tax_totals" inherit_id="account.document_tax_totals"> <xpath expr="//t[@t-call='account.tax_groups_totals']" position="replace"> <tr> <td><strong>Taxes</strong></td> <td class="text-right"> <span t-esc="document.amount_tax" t-options='{"widget": "monetary", "display_currency": document.currency_id}'/> </td> </tr> </xpath> </template>补充说明:
Odoo的子模板在被调用时,变量传递依赖于父模板的t-set或上下文继承,直接使用非标准变量会导致兼容性问题,尤其是多公司这种存在不同配置或调用路径的场景,必须遵循子模板本身的变量规范。
内容的提问来源于stack exchange,提问作者forvas
相关产品推荐
相关产品推荐

