Search code examples
pythonodooodoo-8

Relate One2many field, on an already related one - Odoo v8


I need to relate a field which is on a One2many field of another model, so far I've tried like this:

field_many = fields.Many2one('other.model', string="Many field")
field_related = fields.Float(string="My field", related="field_many.one2manyfield.field")

But it throws me:

Traceback (most recent call last):
File "werkzeug\serving.py", line 177, in run_wsgi

File "werkzeug\serving.py", line 165, in execute

File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\service\server.py", line 294, in app
return self.app(e, s)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\service\wsgi_server.py", line 216, in application
return application_unproxied(environ, start_response)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\service\wsgi_server.py", line 202, in application_unproxied
result = handler(environ, start_response)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\http.py", line 1299, in __call__
return self.dispatch(environ, start_response)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\http.py", line 1273, in __call__
return self.app(environ, start_wrapped)
File "werkzeug\wsgi.py", line 579, in __call__

File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\http.py", line 1444, in dispatch
ir_http = request.registry['ir.http']
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\http.py", line 355, in registry
return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\modules\registry.py", line 339, in get
update_module)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\modules\registry.py", line 370, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\modules\loading.py", line 357, in load_modules
registry.setup_models(cr)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\modules\registry.py", line 194, in setup_models
model._setup_fields(cr, SUPERUSER_ID)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\api.py", line 372, in old_api
result = method(recs, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\models.py", line 3010, in _setup_fields
field.setup(self.env)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\fields.py", line 468, in setup
self._setup_related(env)
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\fields.py", line 514, in _setup_related
field = recs._fields[name]
  KeyError: 'one2manyfield'

Any ideas on how to achieve this?


Solution

  • But you are creating a related field that is in one2many field?!! don't forget o2m can have more than one record so odoo will be confused when trying to get the value.

     o2m_field.some_field  # witch record to access [like singleton error]
    

    but the error is showing that odoo cannot find a field named one2manyfield in other.model is it a related field too.

    if so i think odoo cannot find it because by default related field are not stored in database. but storing a related field that is one2many field is not by just adding store=True i didn't try it but as we know o2many field should have a many2one in other model.

    so it's better to explain what you want by example and i think you need to use power of computed field instead.