Search code examples
odoo-15

Handling Bidirectional Relations Limitation in Odoo


I've been trying to establish relations between three different models with the goal of adding a device and a card to a unit. However, when I add 'device_rel' and 'card_rel', Odoo gives this error:

class wialon_unit(models.Model):
    _name = "gpscontrol.wialon_unit"
    _inherit = ["motion.tracking_unit"]
    _rec_name = "name"
    _sql_constraints = [
        ('name_uniq', 'unique (id_wialon)',
         'El id wialon no puede repetirse')
    ]

    device_rel = fields.One2many(
        'motion.internal_device', string="Dispositivo")
    card_rel = fields.One2many(
        'motion.internal_card', string="SIM")
RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/api.py", line 886, in get
    return field_cache[record._ids[0]]
KeyError: 196

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/fields.py", line 1082, in __get__
    value = env.cache.get(record, self)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/api.py", line 889, in get
    raise CacheMiss(record, field)
odoo.exceptions.CacheMiss: 'ir.actions.act_window(196,).search_view'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
    result = request.dispatch()
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 698, in dispatch
    result = self._call_function(**self.params)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 368, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 357, in checked_call
    result = self.endpoint(*a, **kw)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 921, in __call__
    return self.method(*args, **kw)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 546, in response_wrap
    response = f(*args, **kw)
  File "/Users/admin/Desktop/back_end/odoo/odoo/addons/web/controllers/main.py", line 1603, in load
    action = request.env[action_type].sudo().browse([action_id]).read()
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/addons/base/models/ir_actions.py", line 255, in read
    result = super(IrActionsActWindow, self).read(fields, load=load)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/models.py", line 3235, in read
    return self._read_format(fnames=fields, load=load)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/models.py", line 3255, in _read_format
    vals[name] = convert(record[name], record, use_name_get)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/models.py", line 5916, in __getitem__
    return self._fields[key].__get__(self, type(self))
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/fields.py", line 1131, in __get__
    self.compute_value(recs)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/fields.py", line 1290, in compute_value
    records._compute_field_value(self)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/models.py", line 4269, in _compute_field_value
    fields.determine(field.compute, self)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/fields.py", line 87, in determine
    return needle(*args)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/addons/base/models/ir_actions.py", line 222, in _compute_search_view
    fvg = self.env[act.res_model].fields_view_get(act.search_view_id.id, 'search')
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/api.py", line 540, in __getitem__
    return self.registry[model_name]._browse(self, (), ())
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/modules/registry.py", line 182, in __getitem__
    return self.models[model_name]
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 654, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/Users/admin/Desktop/back_end/odoo/odoo/odoo/http.py", line 301, in _handle_exception
    raise exception.with_traceback(None) from new_cause
KeyError: 'gpscontrol.wialon_unit'

I've checked my manifest.py to ensure that the model is included in the 'depends' section, and everything appears to be in order. (motion_service_orders)

"depends": [
        "base",
        "base_geoengine",
        "base_geolocalize",
        "motion_service_orders"
    ],

Solution

  • The issue at hand revolves around Odoo's limitation in accommodating bidirectional relations. In my particular scenario, I find myself needing to reconsider and approach the solution differently than initially planned.