如何解决 res_partner.<column> 列在 Odoo 中不存在的问题?

How to solve column res_partner.<column> does not exist in Odoo?

例如,'reonp' 很好地添加到模型中,但是当我尝试添加 'gradjanin' 时,Odoo 10 引发错误

我正在尝试重启服务器

py

class komPartnerrReon(models.Model):
    _inherit = 'res.partner'

    reonp = fields.Many2one('kom.reon')
    gradjanin = fields.Boolean('Gradjanin', default=False) #There was an error after adding this line of code

错误

  File "C:\odoo-10.0\odoo\sql_db.py", line 231, in execute
      res = self._obj.execute(query, params)
ProgrammingError: column res_partner.gradjanin does not exist
LINE 1: ...id" as "parent_id","res_partner"."name" as "name","res_partn...

在此之前,添加取决于 res.partner 的清单。

'depends': ['base'],

并更新模块。再试一次!

我建议使用此 SQL 查询将其手动添加到 'res_partner' :

ALTER TABLE res_partner 
    ADD COLUMN gradjanin BOOLEAN;

您'res_users'也遇到了这个问题,不需要重启服务。

这实际上是您在使用新字段扩展模型 res.partner 时遇到的典型错误。

在启动 Odoo 服务器时,每个模块 python 文件都将是 "loaded" 所以当然你在 res.partner 上的新字段也是。但这仅在 python 方面或在应用程序本身方面更好。现在尝试使用应用程序或 "loading something in Odoo's webclient" 将尝试从数据库加载数据,其中新字段没有相应的列。

例如登录。在登录时,Odoo 将加载正在登录的用户。模型 res.users 继承了整个模型 res.partner,因此 Odoo 会尝试从数据库加载 res.partner 数据。并发出错误消息。

如果已经登录,也可能会发生这种情况。例如,在带有聊天的模型的公式视图中。喋喋不休加载追随者,他们是合作伙伴,所以 boom 错误。

你能做些什么来解决这个问题?

在服务器启动时更新模块

带参数-u(如果系统中有多个数据库带-d

odoo -c <path_to_config> -u my_module -d my_database

如果那不可能,

例如在生产系统中或者因为 Odoo 作为服务启动,尝试启动第二个实例,它只会更新模块并在之后立即停止。

odoo -c <path_to_config> -u my_module -d my_database --max-cron-threads=0 --stop-after-init --no-xmlrpc

这就像一个 "self-destroying" 无头 Odoo 实例。参数 --no-xmlrpc 在 Odoo V11+ 中将是 --no-http

告诉Odoo在数据库中更新一个module/app.

UPDATE ir_module_module set state = 'to upgrade' where name = 'my_module';

之后重启 Odoo。

或取巧:

只需进入“应用程序”菜单并打开 module/app。重启 Odoo 并更新 module/app。这是最快的方法,但你猜对了,你有时会忘记这样做。而且它只在你收到错误之前起作用;-)

因为 res_partner 模型属于 odoo base 模块 所以每当你继承 base 模型 到自定义模块,尝试在启动 odoo 服务 时升级模块,在这种情况下:

语法: py "FILE__PATH_To_odoo-bin" --conf "FILE__PATH_To_odoo.conf" -u MY_CUSTOM_MODULE_NAME

示例:

py "C:\odoo13\odoo-bin" --conf "C:\odoo13\odoo.conf" -u my_module