Odoo17添加invoice_url自定义字段至mailing.mailing模型报错求助
解决Odoo 17中“Field 'invoice_url' does not exist in model 'mailing.mailing'”报错
可能的原因及对应解决步骤
1. 检查模型字段定义是否正确
确保你在mailing_mailing.py中正确继承原模型并添加字段:
from odoo import models, fields class MailingMailing(models.Model): _inherit = 'mailing.mailing' # 必须明确继承原模型 invoice_url = fields.Char(string="Invoice URL") # 匹配url widget的字段类型要求
- 确认文件放在自定义模块的
models目录下,路径无误 - 模块的
__manifest__.py中depends列表必须包含mass_mailing:'depends': ['mass_mailing'],
2. 升级自定义模块
修改模型后必须升级模块,让Odoo将新字段同步到数据库:
- 进入Odoo后台,打开「应用」模块
- 找到你的自定义模块,点击「升级」按钮
- 等待升级完成后刷新页面
3. 修正搜索视图的实现方式
不要直接重写整个搜索视图,改用视图继承避免覆盖原视图内容:
<record id="view_mail_mass_mailing_search_inherit" model="ir.ui.view"> <field name="name">mailing.mailing.search.inherit</field> <field name="model">mailing.mailing</field> <field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_search"/> <field name="arch" type="xml"> <!-- 在campaign_id字段后插入新字段 --> <field name="campaign_id" position="after"> <field name="invoice_url" widget="url" string="Invoice URL"/> </field> </field> </record>
- 确保
inherit_id正确引用mass_mailing模块的默认搜索视图view_mail_mass_mailing_search
4. 验证字段权限
确保当前用户对mailing.mailing模型有访问权限,且字段未被隐藏:
- 进入「设置」→「技术」→「模型」,找到
mailing.mailing - 检查字段
invoice_url是否存在,且权限设置正确 - 若使用自定义安全规则,需确保规则包含对该字段的读写权限
5. 排查模块冲突
如果以上步骤无效,检查是否有其他自定义模块重写了mailing.mailing模型,导致字段被覆盖:
- 暂时禁用其他自定义模块,逐一排查冲突
内容的提问来源于stack exchange,提问作者Coloiry
相关产品推荐
相关产品推荐

