简体   繁体   中英

How can i solve KeyError: 'ir.actions.view' odoo?

am a noob to odoo and am trying to build a custom module. I removed the menuitems on some of the views but i still got the same error. I got the error below when i tried to add a submenu to farm_menu . How do i make the menu work like this? Animals *feeds *feeding records

Your help is highly appreciated.

Error

Traceback (most recent call last):
  File "/opt/odoo/odoo/odoo/tools/cache.py", line 88, in lookup
    r = d[key]
  File "/opt/odoo/odoo/odoo/tools/func.py", line 69, in wrapper
    return func(self, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/tools/lru.py", line 44, in __getitem__
    a = self.d[obj].me
KeyError: ('ir.ui.menu', <function IrUiMenu.load_menus at 0x7f3f849090d0>, 2, None, ('en_US',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/odoo/odoo/odoo/tools/cache.py", line 88, in lookup
    r = d[key]
  File "/opt/odoo/odoo/odoo/tools/func.py", line 69, in wrapper
    return func(self, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/tools/lru.py", line 44, in __getitem__
    a = self.d[obj].me
KeyError: ('ir.ui.menu', <function IrUiMenu._visible_menu_ids at 0x7f3f848fc730>, frozenset({1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 79, 80, 81, 82, 84, 85}), None)

During handling of the above exception, another exception occurred:

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

During handling of the above exception, another exception occurred:

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

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mustaf/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 304, in run_wsgi
    execute(self.server.app)
  File "/home/mustaf/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 292, in execute
    application_iter = app(environ, start_response)
  File "/opt/odoo/odoo/odoo/service/server.py", line 434, in app
    return self.app(e, s)
  File "/opt/odoo/odoo/odoo/service/wsgi_server.py", line 142, in application
    return application_unproxied(environ, start_response)
  File "/opt/odoo/odoo/odoo/service/wsgi_server.py", line 117, in application_unproxied
    result = odoo.http.root(environ, start_response)
  File "/opt/odoo/odoo/odoo/http.py", line 1320, in __call__
    return self.dispatch(environ, start_response)
  File "/opt/odoo/odoo/odoo/http.py", line 1293, in __call__
    return self.app(environ, start_wrapped)
  File "/home/mustaf/.local/lib/python3.6/site-packages/werkzeug/middleware/shared_data.py", line 220, in __call__
    return self.app(environ, start_response)
  File "/opt/odoo/odoo/odoo/http.py", line 1488, in dispatch
    result = ir_http._dispatch()
  File "/opt/odoo/odoo/addons/auth_signup/models/ir_http.py", line 19, in _dispatch
    return super(Http, cls)._dispatch()
  File "/opt/odoo/odoo/addons/web_editor/models/ir_http.py", line 22, in _dispatch
    return super(IrHttp, cls)._dispatch()
  File "/opt/odoo/odoo/addons/http_routing/models/ir_http.py", line 403, in _dispatch
    result = super(IrHttp, cls)._dispatch()
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_http.py", line 207, in _dispatch
    return cls._handle_exception(e)
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_http.py", line 177, in _handle_exception
    return request._handle_exception(exception)
  File "/opt/odoo/odoo/odoo/http.py", line 776, in _handle_exception
    return super(HttpRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo/odoo/http.py", line 314, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/odoo/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_http.py", line 203, in _dispatch
    result = request.dispatch()
  File "/opt/odoo/odoo/odoo/http.py", line 835, in dispatch
    r = self._call_function(**self.params)
  File "/opt/odoo/odoo/odoo/http.py", line 346, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo/odoo/http.py", line 941, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo/odoo/http.py", line 519, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 457, in web_client
    context = request.env['ir.http'].webclient_rendering_context()
  File "/opt/odoo/odoo/addons/web/models/ir_http.py", line 17, in webclient_rendering_context
    'menu_data': request.env['ir.ui.menu'].load_menus(request.debug),
  File "</home/mustaf/.local/lib/python3.6/site-packages/decorator.py:decorator-gen-31>", line 2, in load_menus

  File "/opt/odoo/odoo/odoo/tools/cache.py", line 93, in lookup
    value = d[key] = self.method(*args, **kwargs)
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_ui_menu.py", line 234, in load_menus
    menu_roots = self.get_user_roots()
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_ui_menu.py", line 204, in get_user_roots
    return self.search([('parent_id', '=', False)])
  File "/opt/odoo/odoo/odoo/models.py", line 1562, in search
    res = self._search(args, offset=offset, limit=limit, order=order, count=count)
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_ui_menu.py", line 135, in _search
    menus = menus._filter_visible_menus()
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_ui_menu.py", line 125, in _filter_visible_menus
    visible_ids = self._visible_menu_ids(request.debug if request else False)
  File "</home/mustaf/.local/lib/python3.6/site-packages/decorator.py:decorator-gen-28>", line 2, in _visible_menu_ids

  File "/opt/odoo/odoo/odoo/tools/cache.py", line 93, in lookup
    value = d[key] = self.method(*args, **kwargs)
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_ui_menu.py", line 94, in _visible_menu_ids
    action_menus = menus.filtered(lambda m: m.action and m.action.exists())
  File "/opt/odoo/odoo/odoo/models.py", line 4901, in filtered
    return self.browse([rec.id for rec in self if func(rec)])
  File "/opt/odoo/odoo/odoo/models.py", line 4901, in <listcomp>
    return self.browse([rec.id for rec in self if func(rec)])
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_ui_menu.py", line 94, in <lambda>
    action_menus = menus.filtered(lambda m: m.action and m.action.exists())
  File "/opt/odoo/odoo/odoo/fields.py", line 1009, in __get__
    self.determine_value(record)
  File "/opt/odoo/odoo/odoo/fields.py", line 1112, in determine_value
    record._prefetch_field(self)
  File "/opt/odoo/odoo/odoo/models.py", line 2843, in _prefetch_field
    result = records.read([f.name for f in fs], load='_classic_write')
  File "/opt/odoo/odoo/odoo/models.py", line 2781, in read
    self._read_from_database(stored, inherited)
  File "/opt/odoo/odoo/odoo/models.py", line 2934, in _read_from_database
    values = [convert(value, target, validate=False) for value in values]
  File "/opt/odoo/odoo/odoo/models.py", line 2934, in <listcomp>
    values = [convert(value, target, validate=False) for value in values]
  File "/opt/odoo/odoo/odoo/fields.py", line 2032, in convert_to_cache
    if record.env[res_model].browse(int(res_id)).exists():
  File "/opt/odoo/odoo/odoo/api.py", line 831, in __getitem__
    return self.registry[model_name]._browse((), self)
  File "/opt/odoo/odoo/odoo/modules/registry.py", line 176, in __getitem__
    return self.models[model_name]
KeyError: 'ir.actions.view'

animals.py

from odoo import models, fields

class FarmAnimalsFarmAnimals(models.Model):
    _name ='farmanimal.farmanimal'

    name= fields.Char(string='Name', required=True)
    photo = fields.Binary(string='Image')
    sex = fields.Selection([('male','Male'),('female','Female')], string='Sex')
    animal_dob = fields.Date(string='Date of birth/entry')
    animal_type = fields.Selection(
        [('cow','Cow'), ('bull','Bull'), ('goat','Goat'), ('sheep','Sheep'), 
        ('fish','Fish'), ('rabbit','Rabbit'), ('chicken','Chicken'), ('turkey','Turkey'),
        ('ducks','Ducks'),('quells','Quells'),('camel','Camel'), ('horse','Horse'),], 
        string='Animal Type') 

feeds.py

from odoo import models, fields

class FeedsFeeds(models.Model):
    _name ='feed.feed'

    f_name = fields.Char(string='Feed Name', required=True)
    f_photo  = fields.Binary(string='Product Image')

feed_records.py

from odoo import models, fields

class FeedRecordsFeedRecords(models.Model):
    _name ='feedrecord.feedrecord'
    _inherits={'farmanimal.farmanimal','feed.feed'}

    feed_animal =  fields.Many2one( 'farmanimal.farmanimal','feed_animal_default_rel','name', string='Feed Animal',)
    feed_name = fields.Many2many('feed.feed', 'feed_default_rel', 'f_name', string='Consumed Feed(s)',)
    amount  = fields.Integer(string='Amount(In Grams)',)
    feed_date_time = fields.Datetime(string='Date and Time',default=fields.Datetime.now,)

vaccines.py

from odoo import models, fields

class VaccinesVaccines(models.Model):
    _name ='vaccine.vaccine'

    v_name = fields.Char(string='Vaccine Name', required=True)
    v_photo  = fields.Binary(string='Product Image')

vaccinations_records.py

from odoo import models, fields

class VaccinationRecordsVaccinationRecords(models.Model):
    _name ='vaccinationrecord.vaccinationrecord'
    _inherits={'farmanimal.farmanimal','vaccine.vaccine'}

    vaccinated_animal =  fields.Many2one( 'farmanimal.farmanimal','vaccinated_animal_default_rel','name', string='Vacinated Animal',)
    vaccine_name = fields.Many2many('vaccine.vaccine', 'vaccine_default_rel', 'v_name', string='Vaccine(s)',)
    vaccination_date_time = fields.Datetime(string='Date and Time',default=fields.Datetime.now,)
    next_vaccination_date = fields.Date(string='Next Date',)

diseases.py

from odoo import models, fields

class DiseasesDiseases(models.Model):
    _name ='disease.disease'
    _inherits='vaccine.vaccine'

    d_name= fields.Char(string='Name', required=True)
    d_type = fields.Selection(
        [('infectious disease','Infectious Disease'), ('deficiency disease','Deficiency Disease'), ('hereditary disease','Hereditary Disease'), ('physiological diseases','Physiological Diseases')], string='Disease Type')
    s_vector = fields.Selection(
        [('airborne','Airborne'), ('foodborne','Foodborne'), ('infectious','Infectious'), ('lifestyle','Lifestyle'), ('non-communicable','Non-communicable')], 
        string='Spread Vector')
    threat_level = fields.Selection(
        [('high','High'), ('medium','Medium'), ('low','Low'), ('immediate quarantine','Immediate Quarantine')], string='Threat Level')
    cure = fields.Many2many('vaccine.vaccine', 'disease_cure_default_rel', 'v_name', string='Cure')

farm_view.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <odoo>
        <data>
            <record id="farm_menu_action" model="ir.actions.act_window">
                <field name="name">Animals</field>
                <field name="res_model">farmanimal.farmanimal</field>
                <field name="view_type">form</field>
                <field name="view_mode">kanban,tree,form</field>
                <field name="domain">[]</field>
                <field name="help" type="html">
                    <p class="or_view_nocontent_create">Create The First Animal

                    </p>
                </field>

            </record>
            <!--farm animals tree view-->
            <record id="farm_tree_view" model="ir.ui.view">
                <field name="name">Animal Tree</field>
                <field name="model">farmanimal.farmanimal</field>
                <field name="arch" type="xml">
                    <tree string="Animals">
                        <field name="name"/>
                        <field name="sex"/>
                        <field name="animal_type"/>
                        <field name="animal_dob"/>
                    </tree>
                </field>
            </record>
            <!--farm animals kanban view-->
            <record id="farm_kanban_view" model="ir.ui.view">
                <field name="name">farmanimal.farmanimal.kanban</field>
                <field name="model">farmanimal.farmanimal</field>
                <field name="arch" type="xml">
                    <kanban class="o_res_farm_kanban">
                        <field name="id"/>
                        <field name="name"/>
                        <field name="sex"/>
                        <field name="animal_type"/>
                        <field name="animal_dob"/>
                        <templates>
                            <t t-name="kanban-box">
                                <div t-attf-class="oe_kanban_global_click">
                                    <div class="o_kanban_image">
                                        <img alt="Avatar" t-att-src="kanban_image('farmanimal.farmanimal','photo',record.id.raw_value)"/>
                                    </div>
                                    <div class="oe_kanban_details">
                                        <strong class="o_kanban_record_title">
                                            <field name="name"/>
                                        </strong>
                                        <div t-if="record.animal_type.value">
                                            <t t-esc="record.animal_type.value"/>
                                        </div>
                                        <div t-if="record.sex.value">
                                            <t t-esc="record.sex.value"/>
                                        </div>
                                        <div t-if="record.animal_dob.value">
                                            <t t-esc="record.animal_dob.value"/>
                                        </div>
                                    </div>
                                </div>

                            </t>
                        </templates>
                    </kanban>
                </field>

            </record>
            <!--farm animals form view-->
            <record id="farm_free_view" model="ir.ui.view">
                <field name="name">Animal Form</field>
                <field name="model">farmanimal.farmanimal</field>
                <field name="arch" type="xml">
                    <form string="Animal">
                        <sheet>
                            <field name="photo" widget="image" class="oe_left oe_avatar" />
                            <div class="oe_title">
                                <h3>
                                    <field name="name"/>
                                </h3>
                            </div>
                            <group>
                                <group>
                                    <field name="animal_type"/>
                                    <field name="sex"/>
                                </group>
                                <group>
                                    <field name="animal_dob"/>
                                </group>
                            </group>
                            <notebook>
                              <page string="Feeding Records">

                              </page>
                              <page string="Vaccination Records">

                              </page> 
                            </notebook>

                        </sheet>
                    </form>
                </field>
            </record>

            <menuitem id="farm_menu" name="Farm Management" action="farm_menu_action"/>
            <menuitem id="farm_animal_menu" parent="farm_menu"  name="Farm Animals"/>
        </data>
    </odoo>

farm_records_view.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data>
        <record id="farm_menu_action" model="ir.actions.act_window">
            <field name="name">Animals</field>
            <field name="res_model">farmanimal.farmanimal</field>
            <field name="view_type">form</field>
            <field name="view_mode">kanban,tree,form</field>
            <field name="domain">[]</field>
            <field name="help" type="html">
                <p class="or_view_nocontent_create">Create The First Animal

                </p>
            </field>

        </record>
        <!--farm animals tree view-->
        <record id="farm_tree_view" model="ir.ui.view">
            <field name="name">Animal Tree</field>
            <field name="model">farmanimal.farmanimal</field>
            <field name="arch" type="xml">
                <tree string="Animals">
                    <field name="name"/>
                    <field name="sex"/>
                    <field name="animal_type"/>
                    <field name="animal_dob"/>
                </tree>
            </field>
        </record>
        <!--farm animals kanban view-->
        <record id="farm_kanban_view" model="ir.ui.view">
            <field name="name">farmanimal.farmanimal.kanban</field>
            <field name="model">farmanimal.farmanimal</field>
            <field name="arch" type="xml">
                <kanban class="o_res_farm_kanban">
                    <field name="id"/>
                    <field name="name"/>
                    <field name="sex"/>
                    <field name="animal_type"/>
                    <field name="animal_dob"/>
                    <templates>
                        <t t-name="kanban-box">
                            <div t-attf-class="oe_kanban_global_click">
                                <div class="o_kanban_image">
                                    <img alt="Avatar" t-att-src="kanban_image('farmanimal.farmanimal','photo',record.id.raw_value)"/>
                                </div>
                                <div class="oe_kanban_details">
                                    <strong class="o_kanban_record_title">
                                        <field name="name"/>
                                    </strong>
                                    <div t-if="record.animal_type.value">
                                        <t t-esc="record.animal_type.value"/>
                                    </div>
                                    <div t-if="record.sex.value">
                                        <t t-esc="record.sex.value"/>
                                    </div>
                                    <div t-if="record.animal_dob.value">
                                        <t t-esc="record.animal_dob.value"/>
                                    </div>
                                </div>
                            </div>

                        </t>
                    </templates>
                </kanban>
            </field>

        </record>
        <!--farm animals form view-->
        <record id="farm_free_view" model="ir.ui.view">
            <field name="name">Animal Form</field>
            <field name="model">farmanimal.farmanimal</field>
            <field name="arch" type="xml">
                <form string="Animal">
                    <sheet>
                        <field name="photo" widget="image" class="oe_left oe_avatar" />
                        <div class="oe_title">
                            <h3>
                                <field name="name"/>
                            </h3>
                        </div>
                        <group>
                            <group>
                                <field name="animal_type"/>
                                <field name="sex"/>
                            </group>
                            <group>
                                <field name="animal_dob"/>
                            </group>
                        </group>
                        <notebook>
                          <page string="Feeding Records">

                          </page>
                          <page string="Vaccination Records">

                          </page> 
                        </notebook>

                    </sheet>
                </form>
            </field>
        </record>

        <menuitem id="farm_menu" name="Farm Management" action="farm_menu_action"/>
        <menuitem id="farm_animal_menu" parent="farm_menu"  name="Farm Animals"/>
    </data>
</odoo>

feed_records_view.py

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data>
        <record id="feeding_menu_action" model="ir.actions.act_window">
            <field name="name">Feeding Record</field>
            <field name="res_model">feedrecord.feedrecord</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
            <field name="domain">[]</field>
            <field name="help" type="html">
                <p class="or_view_nocontent_create">Create The First Feeding Record

                </p>
            </field>           
        </record>
        <!--Feed tree view-->
        <record id="feed_tree_view" model="ir.ui.view">
            <field name="name">Feeding Record Tree</field>
            <field name="model">feedrecord.feedrecord</field>
            <field name="arch" type="xml">
                <tree string="Feeding Record">
                    <field name="feed_animal"/>
                    <field name="feed_name"/>
                    <field name="amount"/>
                    <field name="feed_date_time"/>
                </tree>
            </field>
        </record>
        <!--feeding form view-->
        <record id="feeding_free_view" model="ir.ui.view">
            <field name="name">Feeding Record Form</field>
            <field name="model">feedrecords.feedrecords</field>
            <field name="arch" type="xml">
                <form string="Feeding Records">
                    <sheet>
                        <div class="oe_title">
                            <h1>
                                <field name="feed_animal"/>
                            </h1>
                        </div>
                        <group>
                            <group>
                                <field name="feed_name"/>
                                <field name="amount"/>
                                <field name="feed_date_time"/>
                            </group>
                        </group>

                    </sheet>
                </form>
            </field>
        </record>
    </data>
</odoo>

feeds_view.xml

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data>
        <record id="feeds_menu_action" model="ir.actions.act_window">
            <field name="name">Feeds</field>
            <field name="res_model">feed.feed</field>
            <field name="view_type">form</field>
            <field name="view_mode">kaban,tree,form</field>
            <field name="domain">[]</field>
            <field name="help" type="html">
                <p class="or_view_nocontent_create">Create The First Feed

                </p>
            </field>           
        </record>
        <!--Feed tree view-->
        <record id="feed_tree_view" model="ir.ui.view">
            <field name="name">Feeds</field>
            <field name="model">feed.feed</field>
            <field name="arch" type="xml">
                <tree string="Feeds">
                    <field name="f_name"/>
                </tree>
            </field>
        </record>
        <!--feed kanban view-->
        <record id="feed_kanban_view" model="ir.ui.view">
            <field name="name">feed.feed.kanban</field>
            <field name="model">feed.feed</field>
            <field name="arch" type="xml">
                <kanban class="o_res_farm_kanban">
                    <field name="id"/>
                    <field name="f_name"/>
                    <templates>
                        <t t-name="kanban-box">
                            <div t-attf-class="oe_kanban_global_click">
                                <div class="o_kanban_image">
                                    <img alt="Avatar" t-att-src="kanban_image('feed.feed','f_photo',record.id.raw_value)"/>
                                </div>
                                <div class="oe_kanban_details">
                                    <strong class="o_kanban_record_title">
                                        <field name="f_name"/>
                                    </strong>
                                </div>
                            </div>

                        </t>
                    </templates>
                </kanban>
            </field>
        </record>
        <!--feeding form view-->
        <record id="feed_free_view" model="ir.ui.view">
            <field name="name">Feeds</field>
            <field name="model">feed.feed</field>
            <field name="arch" type="xml">
                <form string="Feeds">
                    <sheet>
                        <field name="f_photo" widget="image" class="oe_left oe_avatar" />
                        <div class="oe_title">
                            <h1>
                                <field name="f_name"/>
                            </h1>
                        </div>                        
                    </sheet>
                </form>
            </field>
        </record>
    </data>
</odoo>

You need to revisit how you are defining your menuitem s. Look at the Odoo documentation for reference.

The Parent menu(s) should not have any action . Only the final (child) menu should be assigned the action.

For example, instead of what you have currently:

<menuitem id="farm_menu" name="Farm Management"
    action="farm_menu_action"/>
<menuitem id="farm_animal_menu" name="Farm Animals"
    parent="farm_menu"/>

You ought to be doing this:

<menuitem id="farm_menu" name="Farm Management"/>
<menuitem id="farm_animal_menu" name="Farm Animals"
    parent="farm_menu"
    action="farm_menu_action"/>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM