diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index efe8735564d..2a6d9fc2a00 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -632,7 +632,7 @@ class IrModelFields(models.Model): """ Return the ``ir.model.fields`` record corresponding to ``self.related``. """ names = self.related.split(".") last = len(names) - 1 - model_name = self.model + model_name = self.model or self.model_id.model for index, name in enumerate(names): field = self._get(model_name, name) if not field: diff --git a/odoo/addons/base/tests/test_ir_model.py b/odoo/addons/base/tests/test_ir_model.py index a613ce69fee..acc91faa21b 100644 --- a/odoo/addons/base/tests/test_ir_model.py +++ b/odoo/addons/base/tests/test_ir_model.py @@ -4,7 +4,7 @@ from psycopg2 import IntegrityError from odoo.exceptions import ValidationError -from odoo.tests.common import TransactionCase, HttpCase, tagged +from odoo.tests.common import Form, TransactionCase, HttpCase, tagged from odoo.tools import mute_logger from odoo import Command @@ -424,6 +424,19 @@ class TestIrModel(TransactionCase): self.assertEqual(monetary_field.currency_field, "x_good_currency", "The currency field in monetary should have x_good_currency as name") +@tagged('-at_install', 'post_install') +class TestIrModelEdition(TransactionCase): + def test_new_ir_model_fields_related(self): + """Check that related field are handled correctly on new field""" + model = self.env['ir.model'].create({ + 'name': 'Bananas', + 'model': 'x_bananas' + }) + with self.debug_mode(): + form = Form(self.env['ir.model.fields'].with_context(default_model_id=model.id)) + form.related = 'id' + self.assertEqual(form.ttype, 'integer') + @tagged('test_eval_context') class TestEvalContext(TransactionCase):