从Odoo-10升级至Odoo-15时自定义模块安装Server错误求助
升级Odoo v10自定义模块到v15时的安装错误解决
问题现象
将自定义模块从Odoo v10升级到v15后,安装模块时触发以下错误:
Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/tools/cache.py", line 85, in lookup r = d[key] File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 71, in wrapper return func(self, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/tools/lru.py", line 34, in __getitem__ a = self.d[obj] KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f93db198a60>, 'web.assets_backend') During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 680, in _tag_root f(rec) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 658, in _tag_template return self._tag_record(record) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 567, in _tag_record f_val = self.id_get(f_ref) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 663, in id_get res = self.model_id_get(id_str, raise_if_not_found) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 669, in model_id_get return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found) File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 1943, in _xmlid_to_res_model_res_id return self._xmlid_lookup(xmlid)[1:3] File "<decorator-gen-35>", line 2, in _xmlid_lookup File "/usr/lib/python3/dist-packages/odoo/tools/cache.py", line 90, in lookup value = d[key] = self.method(*args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 1936, in _xmlid_lookup raise ValueError('External ID not found in the system: %s' % xmlid) ValueError: External ID not found in the system: web.assets_backend The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch result = request.dispatch() File "/usr/lib/python3/dist-packages/odoo/http.py", line 687, in dispatch result = self._call_function(**self.params) File "/usr/lib/python3/dist-packages/odoo/http.py", line 359, in _call_function return checked_call(self.db, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper return f(dbname, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/http.py", line 348, in checked_call result = self.endpoint(*a, **kw) File "/usr/lib/python3/dist-packages/odoo/http.py", line 916, in __call__ return self.method(*args, **kw) File "/usr/lib/python3/dist-packages/odoo/http.py", line 535, in response_wrap response = f(*args, **kw) File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1347, in call_button action = self._call_kw(model, method, args, kwargs) File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1335, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/usr/lib/python3/dist-packages/odoo/api.py", line 464, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "/usr/lib/python3/dist-packages/odoo/api.py", line 451, in _call_kw_multi result = method(recs, *args, **kwargs) File "<decorator-gen-74>", line 2, in button_immediate_install File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 74, in check_and_log return method(self, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 483, in button_immediate_install return self._button_immediate_function(type(self).button_install) File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 600, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 87, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 474, in load_modules processed_modules += load_marked_modules(cr, graph, File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 363, in load_marked_modules loaded, processed = load_module_graph( File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 222, in load_module_graph load_data(cr, idref, mode, kind='data', package=package) File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 69, in load_data tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 745, in convert_file convert_xml_import(cr, module, fp, idref, mode, noupdate) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 811, in convert_xml_import obj.parse(doc.getroot()) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 731, in parse self._tag_root(de) File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 693, in _tag_root raise ParseError('while parsing %s:%s, somewhere inside\n%s' % ( Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/http.py", line 643, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/usr/lib/python3/dist-packages/odoo/http.py", line 301, in _handle_exception raise exception.with_traceback(None) from new_cause odoo.tools.convert.ParseError: while parsing None:4, somewhere inside <data name="web_timeline assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <link rel="stylesheet" href="/web_timeline/static/lib/vis/vis-timeline-graph2d.min.css"/> <link rel="stylesheet" href="/web_timeline/static/src/css/web_timeline.css"/> <script type="text/javascript" src="/web_timeline/static/lib/vis/vis-timeline-graph2d.min.js"/> <script type="text/javascript" src="/web_timeline/static/src/js/web_timeline.js"/> </xpath> </data>
已尝试的操作
已在模块的manifest文件中添加静态资源配置,但问题未解决:
'assets': { 'web.assets_backend': [ 'web_timeline/static/src/js/web_timeline.js', ], 'web.assets_common': [ 'web_timeline/static/lib/vis/vis-timeline-graph2d.min.css', 'web_timeline/static/src/css/web_timeline.css', 'web_timeline/static/lib/vis/vis-timeline-graph2d.min.js', ] }
问题原因与解决方案
原因
Odoo从v12开始,静态资源加载方式发生重大变化:
- 不再推荐通过XML继承
web.assets_backend这类资源bundle的方式添加静态资源 - 同时保留XML继承和manifest的
assets配置会引发资源加载冲突 - 若模块依赖未明确声明
web模块,会导致web.assets_backend这类外部ID无法被系统识别
解决步骤
- 删除XML中的资源继承代码:找到包含
<data name="web_timeline assets" inherit_id="web.assets_backend">的XML文件,将这段代码完全删除 - 确认模块依赖:在manifest文件的
depends列表中添加'web'模块,确保系统加载web模块的资源 - 重新安装模块:更新模块列表后,卸载旧版本模块(若已安装),再重新安装升级后的模块
验证
安装完成后,可查看页面源代码,确认对应的CSS和JS文件路径已被正确注入,验证静态资源是否正常加载。
内容的提问来源于stack exchange,提问作者Bengall
相关产品推荐
相关产品推荐

