Odoo 16自定义Conversation频道报错及消息发送问题求助
Odoo 16 自定义频道报错 KeyError: 'mail.channel' 解决方法
问题背景
尝试在Odoo 16中创建自定义Conversation频道,完成以下操作后升级模块报错:
- 在
my_module/data/下创建custom_channels.xml,内容如下:
<?xml version="1.0" encoding="utf-8" ?> <odoo> <data noupdate="1"> <record id="channel_mailing" model="mail.channel"> <field name="name">Mailing queue reports</field> <field name="description">Mailing tasks status and history</field> <field name="public">groups</field> <field name="group_public_id" ref="project.group_project_manager"/> <field name="group_ids" eval="[Command.link(ref('project.group_project_manager'))]"/> </record> </data> </odoo>
- 在模块Manifest文件中配置数据文件:
'data': [ 'security/ir.model.access.csv', 'views/menu.xml', 'data/mailing_queue_channel.xml', ],
重启服务器升级模块时,触发KeyError: 'mail.channel',完整报错栈如下:
Traceback (most recent call last): File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 698, in _tag_root f(rec) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 495, in _tag_record model = env[rec_model] File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/api.py", line 542, in __getitem__ return self.registry[model_name](self, (), ()) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/modules/registry.py", line 190, in __getitem__ return self.models[model_name] KeyError: 'mail.channel' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/http.py", line 1591, in _serve_db return service_model.retrying(self._serve_ir_http, self.env) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/service/model.py", line 133, in retrying result = func() File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/http.py", line 1618, in _serve_ir_http response = self.dispatcher.dispatch(rule.endpoint, args) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/http.py", line 1822, in dispatch result = self.request.registry['ir.http']._dispatch(endpoint) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/addons/base/models/ir_http.py", line 154, in _dispatch result = endpoint(**request.params) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/http.py", line 697, in route_wrapper result = endpoint(self, *args, **params_ok) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/addons/web/controllers/dataset.py", line 46, in call_button action = self._call_kw(model, method, args, kwargs) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/addons/web/controllers/dataset.py", line 33, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/api.py", line 466, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/api.py", line 453, in _call_kw_multi result = method(recs, *args, **kwargs) File "<decorator-gen-83>", line 2, in button_immediate_upgrade File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log return method(self, *args, **kwargs) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/addons/base/models/ir_module.py", line 665, in button_immediate_upgrade return self._button_immediate_function(type(self).button_upgrade) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/addons/base/models/ir_module.py", line 598, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "<decorator-gen-16>", line 2, in new File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/func.py", line 87, in locked return func(inst, *args, **kwargs) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/modules/registry.py", line 90, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/modules/loading.py", line 484, in load_modules processed_modules += load_marked_modules(cr, graph, File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/modules/loading.py", line 372, in load_marked_modules loaded, processed = load_module_graph( File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/modules/loading.py", line 231, in load_module_graph load_data(cr, idref, mode, kind='data', package=package) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/modules/loading.py", line 71, in load_data tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 763, in convert_file convert_xml_import(cr, module, fp, idref, mode, noupdate) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 829, in convert_xml_import obj.parse(doc.getroot()) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 749, in parse self._tag_root(de) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 698, in _tag_root f(rec) File "/home/useruser/Desktop/odoo_dev/16.0/odoo/odoo/tools/convert.py", line 711, in _tag_root raise ParseError('while parsing %s:%s, somewhere inside %s' % (odoo.tools.convert.ParseError: while parsing /home/useruser/Desktop/odoo_dev/16.0/odoo/addons/my_module/data/custom_channels.xml:4, somewhere inside<record id="channel_mailing" model="mail.channel"> <field name="name">Mailing queue reports</field> <field name="description">Mailing tasks status and history</field> <field name="public">groups</field> <field name="group_public_id" ref="project.group_project_manager"/> <field name="group_ids" eval="[Command.link(ref('project.group_project_manager'))]"/> </record>
解决步骤
- 添加模块依赖
在模块的Manifest文件中,找到'depends'列表,添加'mail'模块(mail.channel模型属于mail模块,必须声明依赖才能加载该模型)。修改后的Manifest示例:
'depends': ['base', 'project', 'mail'], 'data': [ 'security/ir.model.access.csv', 'views/menu.xml', 'data/custom_channels.xml', # 修正为实际文件名 ],
修正数据文件名
创建的文件是custom_channels.xml,但Manifest中配置的是mailing_queue_channel.xml,文件名不匹配会导致Odoo无法找到该文件,需将Manifest中的路径改为实际文件名。重新升级模块
保存修改后,重启Odoo服务器,进入模块列表找到自定义模块,点击升级按钮完成更新。
原因说明
Odoo按依赖顺序加载模块,若未声明依赖mail模块,加载当前模块时mail.channel模型还未注册,就会触发KeyError。同时文件名不匹配会导致数据文件无法被正确加载,引发解析错误。
内容的提问来源于stack exchange,提问作者Zarathustra
相关产品推荐
相关产品推荐

