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

Dej*_*vic 2 python inheritance odoo odoo-10

例如,'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
Run Code Online (Sandbox Code Playgroud)

错误

  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...
Run Code Online (Sandbox Code Playgroud)

CZo*_*ner 6

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

在启动 Odoo 服务器时,每个模块 python 文件都将被“加载”,所以当然你的新字段res.partner也将被加载。但这只是在 python 方面或应用程序本身更好。现在尝试使用该应用程序或“在 Odoo 的网络客户端中加载某些内容”将尝试从数据库加载数据,其中新字段没有相应的列。

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

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

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

在服务器启动时更新模块

with 参数-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

这就像一个“自我毁灭”的无头 Odoo 实例。该参数--no-xmlrpc--no-http在 Odoo V11+ 中。

告诉数据库中的 Odoo 更新模块/应用程序。

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

之后只需重新启动Odoo。

或棘手的方式

只需进入应用程序菜单并打开您的模块/应用程序。重启 Odoo 并更新模块/应用程序。这是最快的方法,但你猜对了,有时你会忘记去做。它仅在您收到错误之前有效;-)