首页 > 解决方案 > 我如何解决 Odoo 中的错误 ir.actions.view

问题描述

几天前,我开始在我的工作中学习 Odoo,我正在尝试构建一个自定义应用程序,当我创建这样的视图时

<?xml version="1.0" encoding="UTF-8"?>
        <odoo>
            <data>
                <record id="form_action" model="ir.ui.view">
                    <field name="name">Botle</field>
                    <field name="model">botle.botle</field>
                    <field name="arch" type="xml">
                        <form string="">
                                <field name="epc"/>
                                <field name="pc"/>
                                <field name="crc"/>
                        </form>
                    </field>
                </record>

              <menuitem name="botle" id="menu_botle"/>
              <menuitem name="sub_botle" id="submenu_botles" parent="menu_botle" action="form_action"/>

          </data>
        </odoo>

但是当我升级我的应用程序时,会出现错误“ir.actions.view”,我会发布回溯,以便您获得有关此错误的更多信息

Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/api.py", line 1049, in get
        value = self._data[key][field][record._ids[0]]
    KeyError: 333

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/fields.py", line 1006, in __get__
        value = record.env.cache.get(record, self)
      File "/opt/odoo12/odoo/odoo/api.py", line 1051, in get
        raise CacheMiss(record, field)
    odoo.exceptions.CacheMiss: ('ir.module.module(333,).menus_by_module', None)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/api.py", line 1049, in get
        value = self._data[key][field][record._ids[0]]
    KeyError: 66

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/fields.py", line 1006, in __get__
        value = record.env.cache.get(record, self)
      File "/opt/odoo12/odoo/odoo/api.py", line 1051, in get
        raise CacheMiss(record, field)
    odoo.exceptions.CacheMiss: ('ir.ui.menu(66,).complete_name', None)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/api.py", line 1049, in get
        value = self._data[key][field][record._ids[0]]
    KeyError: 66

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/fields.py", line 1006, in __get__
        value = record.env.cache.get(record, self)
      File "/opt/odoo12/odoo/odoo/api.py", line 1051, in get
        raise CacheMiss(record, field)
    odoo.exceptions.CacheMiss: ('ir.ui.menu(66,).parent_id', None)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo12/odoo/odoo/http.py", line 656, in _handle_exception
        return super(JsonRequest, self)._handle_exception(exception)
      File "/opt/odoo12/odoo/odoo/http.py", line 314, in _handle_exception
        raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
      File "/opt/odoo12/odoo/odoo/tools/pycompat.py", line 87, in reraise
        raise value
      File "/opt/odoo12/odoo/odoo/http.py", line 698, in dispatch
        result = self._call_function(**self.params)
      File "/opt/odoo12/odoo/odoo/http.py", line 346, in _call_function
        return checked_call(self.db, *args, **kwargs)
      File "/opt/odoo12/odoo/odoo/service/model.py", line 97, in wrapper
        return f(dbname, *args, **kwargs)
      File "/opt/odoo12/odoo/odoo/http.py", line 339, in checked_call
        result = self.endpoint(*a, **kw)
      File "/opt/odoo12/odoo/odoo/http.py", line 941, in __call__
        return self.method(*args, **kw)
      File "/opt/odoo12/odoo/odoo/http.py", line 519, in response_wrap
        response = f(*args, **kw)
      File "/opt/odoo12/odoo/addons/web/controllers/main.py", line 966, in call_button
        action = self._call_kw(model, method, args, {})
      File "/opt/odoo12/odoo/addons/web/controllers/main.py", line 954, in _call_kw
        return call_kw(request.env[model], method, args, kwargs)
      File "/opt/odoo12/odoo/odoo/api.py", line 759, in call_kw
        return _call_kw_multi(method, model, args, kwargs)
      File "/opt/odoo12/odoo/odoo/api.py", line 746, in _call_kw_multi
        result = method(recs, *args, **kwargs)
      File "<decorator-gen-67>", line 2, in button_immediate_upgrade
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
        return method(self, *args, **kwargs)
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 627, in button_immediate_upgrade
        return self._button_immediate_function(type(self).button_upgrade)
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 557, in _button_immediate_function
        function(self)
      File "<decorator-gen-68>", line 2, in button_upgrade
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
        return method(self, *args, **kwargs)
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 647, in button_upgrade
        self.browse(module.id for module in todo).write({'state': 'to upgrade'})
      File "/opt/odoo12/odoo/odoo/models.py", line 3379, in write
        self.recompute()
      File "/opt/odoo12/odoo/odoo/models.py", line 5296, in recompute
        vals = {n: rec[n] for n in ns}
      File "/opt/odoo12/odoo/odoo/models.py", line 5296, in <dictcomp>
        vals = {n: rec[n] for n in ns}
      File "/opt/odoo12/odoo/odoo/models.py", line 5143, in __getitem__
        return self._fields[key].__get__(self, type(self))
      File "/opt/odoo12/odoo/odoo/fields.py", line 1010, in __get__
        self.determine_value(record)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1099, in determine_value
        self.compute_value(recs)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1077, in compute_value
        self._compute_value(records)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1068, in _compute_value
        getattr(records, self.compute)()
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 235, in _get_views
        module.menus_by_module = "\n".join(sorted(m.complete_name for m in browse('ir.ui.menu')))
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_module.py", line 235, in <genexpr>
        module.menus_by_module = "\n".join(sorted(m.complete_name for m in browse('ir.ui.menu')))
      File "/opt/odoo12/odoo/odoo/fields.py", line 1010, in __get__
        self.determine_value(record)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1119, in determine_value
        self.compute_value(record)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1077, in compute_value
        self._compute_value(records)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1068, in _compute_value
        getattr(records, self.compute)()
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_ui_menu.py", line 51, in _compute_complete_name
        menu.complete_name = menu._get_full_name()
      File "/opt/odoo12/odoo/odoo/addons/base/models/ir_ui_menu.py", line 57, in _get_full_name
        if self.parent_id:
      File "/opt/odoo12/odoo/odoo/fields.py", line 1010, in __get__
        self.determine_value(record)
      File "/opt/odoo12/odoo/odoo/fields.py", line 1113, in determine_value
        record._prefetch_field(self)
      File "/opt/odoo12/odoo/odoo/models.py", line 2860, in _prefetch_field
        result = records.read([f.name for f in fs], load='_classic_write')
      File "/opt/odoo12/odoo/odoo/models.py", line 2798, in read
        self._read_from_database(stored, inherited)
      File "/opt/odoo12/odoo/odoo/models.py", line 2951, in _read_from_database
        values = [convert(value, target, validate=False) for value in values]
      File "/opt/odoo12/odoo/odoo/models.py", line 2951, in <listcomp>
        values = [convert(value, target, validate=False) for value in values]
      File "/opt/odoo12/odoo/odoo/fields.py", line 2042, in convert_to_cache
        if record.env[res_model].browse(int(res_id)).exists():
      File "/opt/odoo12/odoo/odoo/api.py", line 831, in __getitem__
        return self.registry[model_name]._browse((), self)
      File "/opt/odoo12/odoo/odoo/modules/registry.py", line 176, in __getitem__
        return self.models[model_name]
    KeyError: 'ir.actions.view'

有人能帮我吗 ??

提前致谢

标签: odoo

解决方案


menuitems 属性action需要对模型记录的引用ir.actions.*(大多数情况下ir.actions.act_window是“打开窗口操作”)。但是您的 menuitem 正在引用表单视图 ( ir.ui.view) 记录。

因此,请查看应用程序队列中的 Odoo 文档/代码,以了解如何创建操作。


推荐阅读