Odoo自定义邮件模板修改后无可见变化问题咨询
Odoo销售订单邮件模板修改不生效解决方案
核心原因及对应解决方法
noupdate属性配置导致更新被拦截
你当前使用的XML中data节点设置了noupdate="1",该标记的作用是:节点内的记录仅在模块首次安装时写入数据库,后续模块升级时不会覆盖已有记录,因此你修改XML内容后重新升级模块不会生效。
解决步骤:
- 临时将
<data noupdate="1">修改为<data noupdate="0"> - 升级对应的自定义模块
- 升级完成后将
noupdate属性改回1,避免后续用户在界面修改的模板内容被模块升级覆盖
- 模板未正确写入数据库排查
修改配置升级模块后,进入Odoo后台开启开发者模式,依次点击「设置」→「技术」→「邮件」→「邮件模板」,搜索Sales Order: Send by email模板,查看body_html字段内容是否和你修改的一致:- 若内容未更新:检查自定义模块的
__manifest__.py中是否正确添加了sale作为依赖,覆写的外部IDsale.email_template_edi_sale是否拼写正确 - 若内容已更新但发邮件仍显示旧内容:继续排查后续问题
- 若内容未更新:检查自定义模块的
- 缓存与调用逻辑问题排查
- 重启Odoo服务,清除浏览器缓存后重试
- 确认发邮件场景调用的是该模板:部分二次开发的销售流程可能自定义调用其他邮件模板,你可以在发送邮件的弹窗里直接查看模板内容是否符合预期
- 多语言适配问题排查
如果系统启用了多语言,测试用的客户关联了非默认语言,需要检查对应语言的模板翻译项是否同步更新,避免触发旧的翻译内容。
修正后可生效的XML参考
<?xml version="1.0" encoding="utf-8"?> <odoo> <!-- 升级时临时将noupdate改为0,升级完成后改回1 --> <data noupdate="0"> <record id="sale.email_template_edi_sale" model="mail.template"> <field name="name">Sales Order: Send by email</field> <field name="model_id" ref="sale.model_sale_order" /> <field name="email_from">${object.user_id.email_formatted |safe}</field> <field name="partner_to">${object.partner_id.id}</field> <field name="subject">${object.company_id.as_comercial} ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })</field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> Hello ${object.partner_id.name} this is a message from ODOO </p> </div> </field> <field name="report_template" ref="action_report_saleorder" /> <field name="report_name">${(object.name or '').replace('/','_')}</field> <field name="lang">${object.partner_id.lang}</field> <field name="user_signature" eval="False" /> <field name="auto_delete" eval="True" /> </record> </data> </odoo>
内容的提问来源于stack exchange,提问作者Oscar Vardela
相关产品推荐
相关产品推荐

