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

自定义Odoo模块修改采购订单PDF报告未生效问题求助

问题解决:Odoo采购订单PDF报告文本修改不生效

问题描述

我创建了名为custom_purchase_order_report的自定义模块,想要修改采购订单PDF报告中的文本。继承了purchase_stock.report_purchaseorder_document模板,用通用XPath查找所有<strong>标签并添加自定义内容测试,但修改未生效。

期望效果:将PDF报告中的“Shipping Address”修改为“Chen Address”或添加对应内容。

问题复现步骤:

  • 进入任意采购订单
  • 点击齿轮图标,选择打印->采购订单

现有代码

manifest文件

{
    'name': "Custom Purchase Order Report",
    'summary': "Modify text in the Purchase Order PDF report",
    'version': '1.0',
    'category': 'Purchases',
    'author': "Chen Avnery",
    'license': 'AGPL-3',
    'depends': ['purchase', 'purchase_stock'],
    'data': [
        'views/report_purchase_order.xml',
    ],
    'installable': True,
}

视图文件

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <template id="report_purchaseorder_document_custom_inherit" inherit_id="purchase_stock.report_purchaseorder_document">
            <xpath expr="//strong" position="after">
                <strong>Chen address:</strong>
            </xpath>
        </template>
    </data>
</odoo>

问题原因及解决方案

1. XPath定位不精准

你用的//strong会匹配模板中所有<strong>标签,可能因Odoo模板继承的匹配规则,或目标元素被其他结构包裹,导致修改没作用到目标位置。需精准定位“Shipping Address”对应的<strong>标签:

方案一:通过文本内容定位

直接匹配包含“Shipping Address”的<strong>标签,替换或添加内容:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <template id="report_purchaseorder_document_custom_inherit" inherit_id="purchase_stock.report_purchaseorder_document">
            <!-- 替换原Shipping Address文本 -->
            <xpath expr="//strong[text()='Shipping Address']" position="replace">
                <strong>Chen Address</strong>
            </xpath>
            <!-- 或在原标签后追加内容 -->
            <xpath expr="//strong[text()='Shipping Address']" position="after">
                <strong>Chen address:</strong>
            </xpath>
        </template>
    </data>
</odoo>

方案二:通过父节点定位(更稳定)

如果文本可能因语言包变化,建议通过父节点结构定位(“Shipping Address”通常在<div class="col-xs-6">下):

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <template id="report_purchaseorder_document_custom_inherit" inherit_id="purchase_stock.report_purchaseorder_document">
            <xpath expr="//div[@class='col-xs-6']/strong[contains(text(), 'Shipping Address')]" position="replace">
                <strong>Chen Address</strong>
            </xpath>
        </template>
    </data>
</odoo>

2. 清除缓存并升级模块

修改模板后必须执行以下操作:

  • 进入Odoo后台,点击设置->技术->动作->清除缓存
  • 找到custom_purchase_order_report模块,点击升级

3. 检查模块加载顺序

如果有其他自定义模块也修改了同一份模板,可在manifest中添加sequence字段调整加载优先级(数值越小加载越早):

'sequence': 10,

验证方法

升级模块并清除缓存后,重新打开采购订单,点击打印->采购订单,查看PDF报告中的文本是否已修改。

内容的提问来源于stack exchange,提问作者Chen Avnery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:42:34