在 odoo 12 中找不到模型

Model not found in odoo 12

于是做了一个自定义的医院模块,但是模块升级的时候出现了错误,导致出现这样的错误

Error:
Odoo Server Error

Traceback (most recent call last):
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 1128, in _validate_fields
    check(self)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 351, in _check_xml
    self.postprocess_and_fields(view.model, view_doc, view.id)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 1105, in postprocess_and_fields
    self.raise_view_error(_('Model not found: %(model)s') % dict(model=model), view_id)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 568, in raise_view_error
    raise ValueError(message)
ValueError: Model not found: rumahsakit.poli

Error context:
View `rumahsakit.poli.tree`
[view_id: 1519, xml_id: n/a, model: rumahsakit.poli, parent_id: n/a]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 758, in parse
    self._tags[rec.tag](rec, de, mode=mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 663, in _tag_record
    record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3910, in _load_records
    records = self._load_records_create([data['values'] for data in to_create])
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3824, in _load_records_create
    return self.create(values)
  File "<decorator-gen-33>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 462, in _model_create_multi
    return create(self, arg)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 428, in create
    return super(View, self).create(vals_list)
  File "<decorator-gen-3>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 462, in _model_create_multi
    return create(self, arg)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3641, in create
    fields[0].determine_inverse(batch_recs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1200, in determine_inverse
    getattr(records, self.inverse)()
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 275, in _inverse_arch
    view.write(data)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 445, in write
    res = super(View, self).write(self._compute_defaults(vals))
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3366, in write
    self._write(store_vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3502, in _write
    self._validate_fields(vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 1132, in _validate_fields
    raise ValidationError("%s\n\n%s" % (_("Error while validating constraint"), tools.ustr(e)))
odoo.exceptions.ValidationError: ('Error while validating constraint\n\nModel not found: rumahsakit.poli\n\nError context:\nView `rumahsakit.poli.tree`\n[view_id: 1519, xml_id: n/a, model: rumahsakit.poli, parent_id: n/a]', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 656, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 314, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\pycompat.py", line 87, in reraise
    raise value
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 698, in dispatch
    result = self._call_function(**self.params)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 346, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\service\model.py", line 98, in wrapper
    return f(dbname, *args, **kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 941, in __call__
    return self.method(*args, **kw)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 519, in response_wrap
    response = f(*args, **kw)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 967, in call_button
    action = self._call_kw(model, method, args, {})
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 955, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 759, in call_kw
    return _call_kw_multi(method, model, args, kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 746, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-68>", line 2, in button_immediate_upgrade
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 75, in check_and_log
    return method(self, *args, **kwargs)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 628, in button_immediate_upgrade
    return self._button_immediate_function(type(self).button_upgrade)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 562, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\registry.py", line 86, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 417, in load_modules
    force, status, report, loaded_modules, update_module, models_to_check)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 313, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 222, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package, report=report)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 68, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 802, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 865, in convert_xml_import
    obj.parse(doc.getroot(), mode=mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 755, in parse
    self.parse(rec, mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 764, in parse
    exc_info[2]
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\pycompat.py", line 86, in reraise
    raise value.with_traceback(tb)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 758, in parse
    self._tags[rec.tag](rec, de, mode=mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 663, in _tag_record
    record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3910, in _load_records
    records = self._load_records_create([data['values'] for data in to_create])
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3824, in _load_records_create
    return self.create(values)
  File "<decorator-gen-33>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 462, in _model_create_multi
    return create(self, arg)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 428, in create
    return super(View, self).create(vals_list)
  File "<decorator-gen-3>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 462, in _model_create_multi
    return create(self, arg)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3641, in create
    fields[0].determine_inverse(batch_recs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1200, in determine_inverse
    getattr(records, self.inverse)()
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 275, in _inverse_arch
    view.write(data)
  File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 445, in write
    res = super(View, self).write(self._compute_defaults(vals))
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3366, in write
    self._write(store_vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3502, in _write
    self._validate_fields(vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 1132, in _validate_fields
    raise ValidationError("%s\n\n%s" % (_("Error while validating constraint"), tools.ustr(e)))
odoo.tools.convert.ParseError: "Error while validating constraint

Model not found: rumahsakit.poli

Error context:
View `rumahsakit.poli.tree`
[view_id: 1519, xml_id: n/a, model: rumahsakit.poli, parent_id: n/a]
None" while parsing file:/e:/projects/addon_odoo/rumahsakit/views/poli.xml:4, near
<record model="ir.ui.view" id="rumahsakit_poli_tree">
            <field name="name">rumahsakit.poli.tree</field>
            <field name="model">rumahsakit.poli</field>
            <field name="arch" type="xml">
                <tree string="Poli" editabel="top">
                    <field name="kode"/>
                    <field name="name"/>
                </tree>
            </field>
        </record>

尽管我创建的模型已经初始化了模型,这里是这个模块的模型

from odoo import models, fields

class RumahSakitPoli(models.Model):
    _name = 'rumahsakit.poli'
    _description  = 'Poli'

    name = fields.Char(string='Nama Poli', required=True)
    kode = fields.Char(string='Kode Poli', required=True, copy=False)


    _sql_constraints = [
        ('unique_kode', 'unique(kode)', 'Kode Poli duplicated, mohon cek kembali !'),
    ]

    @api.multi
    def name_get(self):
        result = []
        for me in self:
            result.append((me.id, "%s-%s" %(me.kode, me.name)))
        return result

    @api.model
    def name_search(self, name, args=None, operator='ilike', limit=100):
        args = args or []
        if name:
            recs = self.seacrh([
                '|',
                ('kode', operator, name),
                ('name', operator, name)
            ] + args, limit=limit)
        else:
            recs = self.searc([] + args, limit=limit)
        return recs.name_get()

看起来视图文件中出现错误,无法捕获模型

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <data>
        <record model="ir.ui.view" id="rumahsakit_poli_tree">
            <field name="name">rumahsakit.poli.tree</field>
            <field name="model">rumahsakit.poli</field>
            <field name="arch" type="xml">
                <tree string="Poli" editabel="top">
                    <field name="kode"/>
                    <field name="name"/>
                </tree>
            </field>
        </record>

        <record id="view_ms_poli_search" model="ir.ui.view">
            <field name="name">rumahsakit.poli.search</field>
            <field name="model">rumahsakit.poli</field>
            <field name="arch" type="xml">
                <search string="Search Poli">
                    <field name="name"/>
                    <field name="kode"/>
                </search>
            </field>
        </record>

        <record model="ir.actions.act_window" id="rumahsakit_poli_action">
            <field name="name">Poli</field>
            <field name="res_model">rumahsakit.poli</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
            <field name="context">{}</field>
            <field name="domain">[]</field>
        </record>

        <record id="rumahsakit_poli_action_tree" model="ir.actions.act_window.view">
            <field eval="1" name="sequence"/>
            <field name="view_mode">tree</field>
            <field name="view_id" ref="rumah_sakit_poli_view"/>
            <field name="act_window_id" ref="rumahsakit_poli_action"/>
        </record>
        <record id="rumahsakit_poli_action_tree" model="ir.actions.act_window.view">
            <field eval="1" name="sequence"/>
            <field name="view_mode">tree</field>
            <field name="view_id" ref="rumah_sakit_poli_view"/>
            <field name="act_window_id" ref="rumahsakit_poli_action"/>
        </record>

        <menuitem action="rumahsakit_poli_action" id="rumahsakit_poli_menu" parent="menu_rumahsakit_root" />
    </data>
</odoo>

ir.model.access.csv文件为了安全我也填好了,__init__.py文件里我也做了导入。我对发生的事情感到困惑,因为我还在学习 odoo。

如果您在模型文件中添加 print('IMPORTED'),您可以检查它是否被实际导入。

我觉得可能是导入顺序的问题。 Odoo 以特定顺序加载其模块,如果您在定义模型的模块之前加载的 Odoo 模块中定义了视图,则会导致此类错误。
尝试将视图文件和模型文件放在同一个odoo模块(同一个清单)中。