From 3aa1434164b51d1ddd1a5a2e5c4e60d1a6183607 Mon Sep 17 00:00:00 2001 From: Nicolas Lempereur Date: Thu, 26 Oct 2023 15:57:22 +0000 Subject: [PATCH] [FIX] base: fallback on model_id to fill related field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scenario: - go to a model in technical - create a new field and set "Related Field" to id => error "Unknown field name 'id' in related field 'id'" because we get the field in self.model which is not present in the form view. Fix: Fallback to self.model_id.model as was the case before 16.0 commit: 76f699ca0be5ccb2167f856b6358e48da03e24eb Note: without the change, the added tests fails with: Warning Unknown field name 'id' in related field 'id' AssertionError: False != 'integer opw-3138440 closes #112495 closes odoo/odoo#140583 X-original-commit: aa406352541abd8bbf188da84fc4e370029ffc12 Signed-off-by: Rémy Voet (ryv) Signed-off-by: Nicolas Lempereur (nle) --- odoo/addons/base/models/ir_model.py | 2 +- odoo/addons/base/tests/test_ir_model.py | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) 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):