如何解决res_partner列。 Odoo中不存在?

问题描述 投票:2回答:3

例如,'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...
python inheritance odoo odoo-10
3个回答
1
投票

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

启动Odoo服务器时,每个模块的python文件都会被“加载”,因此您当然也要在res.partner上添加新字段。但这仅在python方面,或者在应用程序本身上更好。现在,尝试使用该应用程序或“在Odoo的webclient中加载某些内容”将尝试从数据库中加载数据,其中新字段没有相应的列。

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

如果已经登录也可能发生。例如,在具有颤动的模型的公式视图中。聊天者会加载跟随者,而跟随者是伙伴,因此请增加错误。

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

在服务器启动时更新模块

带有参数-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实例。在Odoo V11 +中,参数--no-xmlrpc将为--no-http

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

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

之后重新启动Odoo。

或棘手的方式

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


0
投票

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

'depends': ['base'],

并更新模块。再试一次!


0
投票

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

ALTER TABLE res_partner 
    ADD COLUMN gradjanin BOOLEAN;

您也面对'res_users'这个问题,不需要重启服务。

© www.soinside.com 2019 - 2024. All rights reserved.