Odoo中正确继承邮件模板的方法?已配置但未生效
Odoo邮件模板继承不生效问题排查与修复
我尝试在Odoo中继承并修改现有邮件模板,参考教程修改了模板的名称和主题,但重启服务器并更新模块后配置不生效。以下是我的配置代码:
Python模块配置
... 'depends': ['base','auth_signup'], 'data': [ 'data/mail_template.xml', ], ...
XML邮件模板配置
<?xml version='1.0' encoding='utf-8'?> <odoo> <data noupdate="1"> <function name="write" model="ir.model.data"> <function name="search" model="ir.model.data"> <value eval="[('name', '=', 'mail_template_user_signup_account_created'), ('module', '=', 'auth_signup')]" /> </function> <value eval="{'noupdate': False}" /> </function> <!-- Email template for new users that used a signup token --> <record id="auth_signup.mail_template_user_signup_account_created" model="mail.template"> <field name="name">Settings: New User Invite updated</field> <field name="subject">Hello {{ object.name }}: Welcome to {{ object.company_id.name }}!</field> </record> <function name="write" model="ir.model.data"> <function name="search" model="ir.model.data"> <value eval="[('name', '=', 'mail_template_user_signup_account_created'), ('module', '=', 'auth_signup')]" /> </function> <value eval="{'noupdate': True}" /> </function> </data> </odoo>
问题原因及修复步骤
1. 核心问题:外层noupdate属性冲突
你的XML文件外层设置了 <data noupdate="1">,这意味着整个数据块会被标记为「不重复更新」,即使你内部尝试修改原模板的noupdate属性,整个修改逻辑也不会被执行。
2. 正确修复方案
方案一:调整外层noupdate属性
将XML文件外层<data>标签的noupdate="1"改为noupdate="0",确保模块更新时执行修改逻辑:
<?xml version='1.0' encoding='utf-8'?> <odoo> <data noupdate="0"> <!-- 解除原模板的noupdate锁定 --> <function name="write" model="ir.model.data"> <function name="search" model="ir.model.data"> <value eval="[('name', '=', 'mail_template_user_signup_account_created'), ('module', '=', 'auth_signup')]" /> </function> <value eval="{'noupdate': False}" /> </function> <!-- 修改邮件模板内容 --> <record id="auth_signup.mail_template_user_signup_account_created" model="mail.template"> <field name="name">Settings: New User Invite updated</field> <field name="subject">Hello {{ object.name }}: Welcome to {{ object.company_id.name }}!</field> </record> <!-- 可选:恢复原模板的noupdate锁定 --> <function name="write" model="ir.model.data"> <function name="search" model="ir.model.data"> <value eval="[('name', '=', 'mail_template_user_signup_account_created'), ('module', '=', 'auth_signup')]" /> </function> <value eval="{'noupdate': True}" /> </function> </data> </odoo>
方案二:使用Odoo标准继承方式(更推荐)
用<inherit_id>实现模板继承,这是Odoo官方推荐的规范写法,逻辑更清晰:
<?xml version='1.0' encoding='utf-8'?> <odoo> <data noupdate="0"> <record id="mail_template_user_signup_account_created_custom" model="mail.template"> <field name="inherit_id" ref="auth_signup.mail_template_user_signup_account_created"/> <field name="name">Settings: New User Invite updated</field> <field name="subject">Hello {{ object.name }}: Welcome to {{ object.company_id.name }}!</field> </record> </data> </odoo>
3. 验证修改
- 重启Odoo服务器
- 进入模块列表,找到你的自定义模块点击更新
- 前往「设置 > 技术 > 邮件 > 邮件模板」,找到对应模板确认修改是否生效
内容的提问来源于stack exchange,提问作者Jhordy Said Barrera
相关产品推荐
相关产品推荐

