例如,模型中很好地添加了“ 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...
答案 0 :(得分: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并更新模块/应用程序。这是最快的方法,但是您猜到了,有时您会忘记这样做。而且只有在收到错误之前它才有效;-)
答案 1 :(得分:0)
在此添加之前,取决于res.partner
的清单。
'depends': ['base'],
并更新模块。再试一次!
答案 2 :(得分:0)
我建议使用此SQL查询将其手动添加到“ res_partner”:
ALTER TABLE res_partner
ADD COLUMN gradjanin BOOLEAN;
您也遇到'res_users'这个问题,不需要重启服务。
答案 3 :(得分:0)
由于 res_partner 模型属于odoo 基本模块,因此,每当您将基本模型继承到自定义模块时,请尝试在升级该模块的同时启动 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