为什么我在Odoo 10中更新某个模块时,该模块引入的数据记录会被删除? [英] Why are data records introduced by a module removed when I update that module in Odoo 10?
问题描述
我刚刚在Odoo10中恢复了一个数据库,我甚至从服务器复制了实例和viralenv的源代码,以保护环境。还原工作正常,我可以使用数据库了。
但是我想更新所有模块,并且在更新其中一些模块时遇到一些严重错误。例如,当我尝试仅更新一个模块(l10n_es
)时,收到以下错误:
dono.addons.base.ir.ir_model:删除24@account t.account t.type(l10n_es.account_type_ingresos_neto) dono.sql_db:错误查询:DELETE FROM ACCOUNT_ACCOUNT_TYPE WHERE ID IN (24)…… NotNullViolation:列";user_type_id";中的空值违反 非空约束详细信息:失败的行包含(712,NULL,OTHER, 首页--期刊主要分类--期刊细介绍--期刊题录与文摘--期刊详细文摘内容 1,NULL,900000000-02-01 09:28:54.453977,NULL,2018-02-01 09:28:54.453977,空,f)。上下文:SQL语句仅更新(&Q;;UPDATE) 用户集";public";.";account_account";_type_id=NULL,其中$1 运算符(PG_CATALOG.=)&QOT;USER_TYPE_ID&QOOT;
在进行更新之前,我进行了以下查询:
SELECT * FROM ir_model_data WHERE model='account.account.type' AND res_id=24;
返回以下内容:
id | create_uid | create_date | write_date | write_uid | noupdate | name | date_init | date_update | module | model | res_id
------+------------+----------------------------+----------------------------+-----------+----------+----------------------------+---------------------+---------------------+---------+----------------------+--------
7850 | 1 | 2018-02-01 09:19:01.412377 | 2021-02-08 15:28:04.013464 | 1 | f | account_type_ingresos_neto | 2018-02-01 09:19:01 | 2021-02-08 15:28:04 | l10n_es | account.account.type | 24
然后我执行以下命令:
SELECT * FROM account_account_type WHERE id=24;
返回:
id | create_uid | name | write_uid | note | write_date | create_date | include_initial_balance | type
----+------------+--------------------------+-----------+------+----------------------------+----------------------------+-------------------------+-------
24 | 1 | Ingresos patrimonio neto | 1 | | 2021-02-08 15:28:04.013464 | 2018-02-01 09:19:01.412377 | t | other
通过这两个查询,我确认了数据库中有一个ID为24的帐户类型,名为Ingresos parmonio Neto,其外部XML ID为l10n_es.account_type_ingresos_neto
。
l10n_es
模块有一个文件夹data
,其中有一个名为account_type.xml
的文件。此文件由__manifest__.py
调用并创建记录:
<record id="account_type_ingresos_neto" model="account.account.type">
<field name="name">Ingresos patrimonio neto</field>
<field name="include_initial_balance" eval="True"/>
</record>
所以,我不明白为什么当我更新模块时,它会删除此记录(此事实会产生错误):
odoo.addons.base.ir.ir_model: Deleting 24@account.account.type (l10n_es.account_type_ingresos_neto)
我认为当更新模块时,它会删除其外部XML ID(在数据库中)不再在代码中的记录(由它引入),如下所示:Why is the account module upgrade unlinking records on some tables?
我更新模块时,模块为什么删除仍具有XML ID的现有记录?
推荐答案
明确答案
最后,我意识到我在Odoo实例中重复了两次有罪模块(l10n_es
)。它位于addons_path
参数调用的两个不同路径中。
对于10.0版的l10n_es
,Odoo Community Association将模块放在两个不同的存储库中:OCB
和l10n-spain
。Odoo的更高版本不是这种情况,在这些版本中,OCA使用OCBl10n_es
,而不创建自己的l10n_es
。
旧答案
在ir_model_data
(问题中引用的链接的解决方案)中更改模块或名称的问题在于,我们更改的那些记录可以在模块更新时重复。
我的解决方案是对冲突记录执行以下查询:
UPDATE ir_model_data SET noupdate=TRUE WHERE module='l10n_es' AND name='account_type_ingresos_neto';
这样,更新模块时不会删除记录,因此,其他记录(将其设置为外键)不会引发NOT NULL错误。
实际上,我认为模块l10n_es
应该在加载新记录的某些XML文件中将<data>
标记更改为<data noupdate="1">
。
但实际上,我不知道这是否是最好的解决方案。
这篇关于为什么我在Odoo 10中更新某个模块时,该模块引入的数据记录会被删除?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!