Odoo v13:无法卸载 crm 应用:记录不存在或已被删除记录:ir.model.fields(9311,),用户:1

问题描述

odoo 版本:13.0.20210614

重现方式:在应用程序中,CRM 应用程序。 > 卸载

行为: 附上图 1 无法卸载:错误(附件中的图像 1): ('记录不存在或已被删除 (记录: ir.model.fields(9311,),User: 1)',None)

enter image description here

多次报告相同的错误,但仍未修复:

https://github.com/odoo/odoo/issues/38008

enter image description here

卸载crm App如何处理?

**************** 回溯 **************

2021-06-18 14:21:52,779 6 INFO samadeva-oerp-brstaging-2702918 odoo.addons.base.models.ir_module: ALLOW access to module.module_uninstall on ['sale_crm','crm_enterprise','crm_sms','website_crm','website_crm_sms','mass_mailing_crm','crm'] to user __system__ #1 via 86.243.106.83 

2021-06-18 14:21:52,800 6 WARNING samadeva-oerp-brstaging-2702918 odoo.modules.loading: Transient module states were reset 

2021-06-18 14:21:52,801 6 ERROR samadeva-oerp-brstaging-2702918 odoo.modules.registry: Failed to load registry 
Traceback (most recent call last):
File "/home/odoo/src/odoo/odoo/api.py",line 745,in get
def get(self,record,field,default=nothing):
value = self._data[field][record._ids[0]]
KeyError: 9311

During handling of the above exception,another exception occurred:

Traceback (most recent call last):

File "/home/odoo/src/odoo/odoo/fields.py",line 1037,in __get__
value = env.cache.get(record,self)

File "/home/odoo/src/odoo/odoo/api.py",line 751,in get
raise CacheMiss(record,field)
odoo.exceptions.CacheMiss: ('ir.model.fields(9311,).model',None)

During handling of the above exception,another exception occurred:

Traceback (most recent call last):

File "/home/odoo/src/odoo/odoo/modules/registry.py",line 86,in new
odoo.modules.load_modules(registry._db,force_demo,status,update_module)

File "/home/odoo/src/odoo/odoo/modules/loading.py",line 494,in load_modules
Module.browse(modules_to_remove.values()).module_uninstall()

File "<decorator-gen-61>",line 2,in module_uninstall

File "/home/odoo/src/odoo/odoo/addons/base/models/ir_module.py",line 73,in check_and_log
return method(self,*args,**kwargs)

File "/home/odoo/src/odoo/odoo/addons/base/models/ir_module.py",line 478,in module_uninstall
self.env['ir.model.data']._module_data_uninstall(modules_to_remove)

File "/home/odoo/src/odoo/odoo/addons/base/models/ir_model.py",line 1898,in _module_data_uninstall
model = self.pool.get(ir_field.model)
File "/home/odoo/src/odoo/odoo/fields.py",line 1050,in __get__
_("(Record: %s,User: %s)") % (record,env.uid),odoo.exceptions.MissingError: ('Record does not exist or has been deleted (Record: ir.model.fields(9311,None)

解决方法

我检查了Click on uninstall crm module触发的这个错误的原因,发现数据库表ir_model_data有一条记录(fk:res_id=9311)指向另一个表ir_model_fields,其中对应的pk id丢失(没有 pk 记录:id=9311)。为了能够卸载 crm 应用程序,我找到的唯一解决方案 - 在搜索数小时后使用 odoo 方式解决它 - 是删除 ir_model_data 中的“孤儿”记录。因为不允许使用oddo-bin shell 执行此操作,所以我必须通过将此行放在可在 ui 上单击的 def_buttonchangestatus python 函数的末尾来触发删除:

   self.env['ir.model.data'].search([('res_id','=',9311)],limit=1).unlink()