You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 18激活应用时出现Model not found错误排查求助

Odoo 18自定义模块激活时出现「Model not found: meeting.management」错误

问题背景

开发meeting_management自定义模块时,模块安装完成后激活触发「Model not found: meeting.management」错误。模块结构包含controllers、models(内有MeetingManagement.py文件)、views(内有meeting_creation.xml视图文件)和static目录。模型代码定义了_name为meeting.management的MeetingManagement类,但视图尝试访问该模型时失败。

相关代码

模型代码(models/meeting.py)

from odoo import models, fields

class MeetingManagement(models.Model):
    _name = 'meeting.management'
    _description = 'Meeting Management'

    space_id = fields.Char(string='Matterport Link', required=True)
    devices = fields.Many2many('meeting.device', string='Devices')
    microphone = fields.Boolean(string='Microphone')
    speaker = fields.Boolean(string='Speaker')
    audio = fields.Selection([('stereo', 'Stereo'), ('mono', 'Mono')], string='Audio')
    participant_name = fields.Char(string='Participant Name')

    def create_meeting(self):
        # Implement logic to create meeting
        # Generate meeting ID and return it
        return 'Generated Meeting ID'

    def join_meeting(self):
        # Implement logic to join meeting
        # Redirect or process further actions
        pass

视图代码(views/meeting_creation.xml)

<!-- views/meeting_creation.xml -->
<odoo>
    <record id="meeting_creation_form" model="ir.ui.view">
        <field name="name">meeting.creation.form</field>
        <field name="model">meeting.management</field>
        <field name="arch" type="xml">
            <form string="Create Meeting">
                <group>
                    <field name="space_id" placeholder="Enter Matterport Link"/>
                </group>
                <footer>
                    <button name="create_meeting" string="Create Meeting" type="object" class="btn-primary"/>
                </footer>
            </form>
        </field>
    </record>
</odoo>

错误信息

RPC_ERROR

Odoo Server Error

Occured on localhost:8069 on model ir.module.module and id 9 on 2024-10-09 08:55:28 GMT

Traceback (most recent call last):
  File "C:\coding\odoo development\17\odoo\odoo\http.py", line 1954, in _transactioning
    return service_model.retrying(func, env=self.env)
  File "C:\coding\odoo development\17\odoo\odoo\service\model.py", line 137, in retrying
    result = func()
  File "C:\coding\odoo development\17\odoo\odoo\http.py", line 1921, in _serve_ir_http
    response = self.dispatcher.dispatch(rule.endpoint, args)
  File "C:\coding\odoo development\17\odoo\odoo\http.py", line 2168, in dispatch
    result = self.request.registry['ir.http']._dispatch(endpoint)
  File "C:\coding\odoo development\17\odoo\odoo\addons\base\models\ir_http.py", line 330, in _dispatch
    result = endpoint(**request.params)
  File "C:\coding\odoo development\17\odoo\odoo\http.py", line 728, in route_wrapper
    result = endpoint(self, *args, **params_ok)
  File "C:\coding\odoo development\17\odoo\addons\web\controllers\dataset.py", line 40, in call_button
    action = call_kw(request.env[model], method, args, kwargs)
  File "C:\coding\odoo development\17\odoo\odoo\api.py", line 517, in call_kw
    result = getattr(recs, name)(*args, **kwargs)
  File "<decorator-gen-79>", line 2, in button_immediate_install
  File "C:\coding\odoo development\17\odoo\odoo\addons\base\models\ir_module.py", line 75, in check_and_log
    return method(self, *args, **kwargs)
  File "C:\coding\odoo development\17\odoo\odoo\addons\base\models\ir_module.py", line 477, in button_immediate_install
    return self._button_immediate_function(self.env.registry[self._name].button_install)
  File "C:\coding\odoo development\17\odoo\odoo\addons\base\models\ir_module.py", line 601, in _button_immediate_function
    registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "<decorator-gen-13>", line 2, in new
  File "C:\coding\odoo development\17\odoo\odoo\tools\func.py", line 97, in locked
    return func(inst, *args, **kwargs)
  File "C:\coding\odoo development\17\odoo\odoo\modules\registry.py", line 131, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "C:\coding\odoo development\17\odoo\odoo\modules\loading.py", line 479, in load_modules
    processed_modules += load_marked_modules(env, graph,
  File "C:\coding\odoo development\17\odoo\odoo\modules\loading.py", line 363, in load_marked_modules
    loaded, processed = load_module_graph(
  File "C:\coding\odoo development\17\odoo\odoo\modules\loading.py", line 226, in load_module_graph
    load_data(env, idref, mode, kind='data', package=package)
  File "C:\coding\odoo development\17\odoo\odoo\modules\loading.py", line 70, in load_data
    tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind)
  File "C:\coding\odoo development\17\odoo\odoo\tools\convert.py", line 608, in convert_file
    convert_xml_import(env, module, fp, idref, mode, noupdate)
  File "C:\coding\odoo development\17\odoo\odoo\tools\convert.py", line 679, in convert_xml_import
    obj.parse(doc.getroot())
  File "C:\coding\odoo development\17\odoo\odoo\tools\convert.py", line 594, in parse
    self._tag_root(de)
  File "C:\coding\odoo development\17\odoo\odoo\tools\convert.py", line 548, in _tag_root
    raise ParseError(msg) from None  # Restart with "--log-handler odoo.tools.convert:DEBUG" for complete traceback
odoo.tools.convert.ParseError: while parsing file:/c:/coding/odoo%20development/17/custom_modules/meeting_management/views/meeting_creation.xml:3
Error while validating view near:

<form string="Create Meeting" __validate__="1">
                <group>
                    <field name="space_id" placeholder="Enter Matterport Link"/>

Model not found: meeting.management

View error context:
{'file': 'c:\\coding\\odoo '
         'development\\17\\custom_modules\\meeting_management\\views\\meeting_creation.xml',
 'line': 1,
 'name': 'meeting.creation.form',
 'view': ir.ui.view(266,),
 'view.model': 'meeting.management',
 'view.parent': ir.ui.view(),
 'xmlid': 'meeting_creation_form'}


The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
    RPCError@http://localhost:8069/web/assets/b23fe77/web.assets_web.min.js:3053:338
    makeErrorFromResponse@http://localhost:8069/web/assets/b23fe77/web.assets_web.min.js:3056:163
    rpc._rpc/promise</<@http://localhost:8069/web/assets/b23fe77/web.assets_web.min.js:3061:34

问题排查与解决步骤

1. 模型文件命名与路径一致性检查

你提到模型实际文件是models/MeetingManagement.py,但代码示例中写的是models/meeting.py,这是最可能的原因。Odoo会自动扫描models目录下的.py文件,但文件名必须与导入路径匹配。

  • 修复方案:
    • 要么将模型文件重命名为meeting.py,保持与代码引用路径一致;
    • 要么在models/__init__.py中显式导入MeetingManagement类。

2. 完善模块导入配置

检查模块的__init__.py文件是否正确配置:

  • 模块根目录的__init__.py需包含:
    from . import models
    
  • models目录下的__init__.py需包含:
    # 如果文件是meeting.py
    from . import meeting
    # 如果文件是MeetingManagement.py
    from . import MeetingManagement
    

Odoo依赖这些导入语句来识别并加载模型类,缺少的话会导致模型无法注册。

3. 确认视图加载顺序

检查模块的__manifest__.py文件,确保data列表中视图文件的加载顺序不会早于模型的注册。典型的__manifest__.py配置:

{
    'name': 'Meeting Management',
    'version': '1.0',
    'depends': ['base'],
    'data': [
        'views/meeting_creation.xml',
    ],
    'installable': True,
    'auto_install': False,
}

注:只要模型通过__init__.py正确导入,无需在data中配置模型文件,Odoo会自动处理加载顺序。

4. 模型类定义验证

确认模型类正确继承models.Model,且_name属性拼写无误。你的代码中_name = 'meeting.management'格式正确,需确保没有大小写或符号错误(Odoo模型名要求全小写,用点号分隔)。

5. 清理服务器缓存并重新安装

Odoo服务器可能缓存旧的模块信息,导致模型未被正确加载:

  • 重启Odoo服务器;
  • 卸载已安装的meeting_management模块;
  • 重新安装并激活模块。

验证步骤

完成上述调整后,按以下流程验证:

  1. 重启Odoo服务;
  2. 进入模块列表,找到meeting_management模块,点击卸载;
  3. 重新安装模块并激活,检查错误是否消失。

内容的提问来源于stack exchange,提问作者moneniko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:29:54