Odoo 11.0扩展res.partner模块报错:res_users.notification_type列不存在
解决Odoo 11.0中
psycopg2.ProgrammingError: column res_users.notification_type does not exist错误 刚接触Odoo 11就踩这个坑确实闹心,我来帮你理清问题根源和解决思路:
问题核心原因
首先得明确一个关键信息:Odoo 11的原生res_users模型根本没有notification_type字段——这个字段是Odoo 12及以后版本才新增的功能。你遇到的错误,大概率是代码或依赖模块不小心引用了这个仅高版本存在的字段,或者数据库残留了高版本的迁移痕迹。
一步步解决方案
1. 先排查自定义代码与依赖模块
花点时间仔细检查你的partner.py、其他自定义模块代码,以及XML视图文件:
- 有没有在视图里试图渲染
res_users.notification_type字段? - 有没有在模型的
search/read方法、计算字段里间接引用了这个字段? - 是不是安装了为高版本Odoo开发的第三方模块?如果是,要么替换为兼容Odoo 11的版本,要么手动修改模块代码移除对该字段的依赖。
2. 检查数据库是否有高版本残留
如果你的数据库是从Odoo 12+降级过来的,很可能残留了对notification_type字段的无效引用。操作前一定要备份数据库,然后用pgAdmin或psql连接数据库,执行以下查询:
-- 确认res_users表是否真的无此字段 SELECT table_name FROM information_schema.columns WHERE column_name = 'notification_type' AND table_name = 'res_users'; -- 检查Odoo模型字段记录里的残留 SELECT * FROM ir_model_fields WHERE name = 'notification_type' AND model = 'res.users';
如果查询到相关记录,手动清理这些残留内容(操作务必谨慎,确保已备份)。
3. 重新初始化自定义模块
如果确认代码无问题,可以试试彻底重置模块:
- 先卸载你的自定义模块
- 删除模块对应的数据库扩展表(比如给
res_partner新增字段后的关联表) - 重新安装模块,再执行「更新应用列表」和「升级模块」操作。
4. 若需类似功能,自行实现字段
如果你是想实现用户通知方式的功能,Odoo 11没有现成字段,不如自己给res_users新增一个:
# 在自定义模块的models目录下新建res_users.py # -*- coding: utf-8 -*- from odoo import fields, models class ResUsers(models.Model): _inherit = 'res.users' notification_type = fields.Selection([ ('email', '仅邮件'), ('inbox', '仅站内信'), ('both', '邮件+站内信') ], string='通知方式', default='both')
然后在用户视图中添加这个字段,就能实现类似高版本的功能,还不会触发报错。
内容的提问来源于stack exchange,提问作者Dario




