I have 2 modules let's call them module_a and the module_b
and i want to use m2o relationships between these 2 models but for both sides and here is the sample code that shows what i am trying to do is
module_a/models/model_a.py
from odoo import models, fields, api
class module_a(models.Model):
_name = 'module_a.module_a'
_description = 'module_a.module_a'
name = fields.Char()
value = fields.Integer()
value2 = fields.Float(compute="_value_pc", store=True)
description = fields.Text()
module_b_id = fields.Many2one('module_b.module_b')
@api.depends('value')
def _value_pc(self):
for record in self:
record.value2 = float(record.value) / 100
module_a/__manifest__.py
{
'name': "module_a",
'summary': "Short (1 phrase/line) summary of the module's purpose",
'description': """
Long description of module's purpose
""",
'author': "My Company",
'website': "https://www.yourcompany.com",
'category': 'Uncategorized',
'version': '0.1',
'depends': ['base'],
'data': [
'security/ir.model.access.csv',
'views/views.xml',
],
}
this is the module_b
module_a/models/model_b.py
from odoo import models, fields, api
class module_b(models.Model):
_name = 'module_b.module_b'
_description = 'module_b.module_b'
name = fields.Char()
value = fields.Integer()
value2 = fields.Float(compute="_value_pc", store=True)
description = fields.Text()
module_a_id = fields.Many2one('module_a.module_a')
module_a_value = fields.Integer(compute='_compute_module_a_id_value')
@api.depends('value')
def _value_pc(self):
for record in self:
record.value2 = float(record.value) / 100
@api.depends('module_a_id')
def _compute_module_a_id_value(self):
for rec in self:
rec.module_a_value =rec.module_a_id.value if rec.module_a_id else False
module_b/__manifest__.py
{
'name': "module_b",
'summary': "Short (1 phrase/line) summary of the module's purpose",
'description': """
Long description of module's purpose
""",
'author': "My Company",
'website': "https://www.yourcompany.com",
'category': 'Uncategorized',
'version': '0.1',
'depends': ['base','module_a'],
'data': [
'security/ir.model.access.csv',
'views/views.xml',
],
}
ERROR
RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/home/trishan/crede/odoo/odoo/http.py", line 1788, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/service/model.py", line 152, in retrying
result = func()
^^^^^^
File "/home/trishan/crede/odoo/odoo/http.py", line 1816, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/http.py", line 2020, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/addons/base/models/ir_http.py", line 221, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/http.py", line 757, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/addons/web/controllers/dataset.py", line 25, in call_kw
return self._call_kw(model, method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/addons/web/controllers/dataset.py", line 21, in _call_kw
return call_kw(Model, method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/api.py", line 480, in call_kw
result = _call_kw_model(method, model, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/api.py", line 451, in _call_kw_model
result = method(recs, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/addons/web/models/models.py", line 47, in web_search_read
values_records = records.web_read(specification)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/addons/web/models/models.py", line 86, in web_read
values_list: List[Dict] = self.read(fields_to_read, load=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/models.py", line 3577, in read
return self._read_format(fnames=fields, load=load)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/models.py", line 3790, in _read_format
vals[name] = convert(record[name], record, use_display_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/trishan/crede/odoo/odoo/fields.py", line 3126, in convert_to_read
return value.id
^^^^^^^^
AttributeError: '_unknown' object has no attribute 'id'
The above server error caused the following client error:
OwlError: An error occured in the owl lifecycle (see this Error's "cause" property)
Error: An error occured in the owl lifecycle (see this Error's "cause" property)
at handleError (http://localhost:8069/web/assets/9d44c3b/web.assets_web.min.js:925:101)
at App.handleError (http://localhost:8069/web/assets/9d44c3b/web.assets_web.min.js:1576:29)
at ComponentNode.initiateRender (http://localhost:8069/web/assets/9d44c3b/web.assets_web.min.js:1017:19)
Caused by: RPC_ERROR: Odoo Server Error
RPC_ERROR
at makeErrorFromResponse (http://localhost:8069/web/assets/9d44c3b/web.assets_web.min.js:2929:163)
at XMLHttpRequest.<anonymous> (http://localhost:8069/web/assets/9d44c3b/web.assets_web.min.js:2933:13)
In case , I have used the related field also instead of using the compute to get value to the model_a_id_value and it is also not working , also I put the module_b as a depends in module_a , it also throw the keyerror as this and i think it cause of the circular dependencies ,
KeyError: 'module_b.module_b'
so what should i do ? is there are fix for this ?
I want to use m2o relationships with module_a and module_b for both sides ?