自定义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
相关产品推荐
相关产品推荐

