You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动