From b5e5a922d4f0d6a0bcdc87f5657f489b13a0f83e Mon Sep 17 00:00:00 2001 From: Romain Estievenart Date: Thu, 17 Aug 2023 12:41:03 +0000 Subject: [PATCH] [FIX] base, test_new_api: adapt generated default form view to Grid When we changed the display of the form in v16, we forgot to adapt the python framework default form view layout (used when the form view of the model isn't defined). This provided a weird layout in these case on Odoo 16.+. To fix this bad behavior, we adapt the algorithm used to build the default view form. Steps to reproduce: Create a model without a form view and edit it (like we do when you follow the rd training). closes odoo/odoo#133837 X-original-commit: 93e95274939abce5f3facde6c8cd29b922d15251 Signed-off-by: Pierre Paridans (app) Signed-off-by: Romain Estievenart (res) --- odoo/addons/base/models/ir_ui_view.py | 34 ++++++++++++++++---- odoo/addons/test_new_api/tests/__init__.py | 1 + odoo/addons/test_new_api/tests/test_views.py | 22 +++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 odoo/addons/test_new_api/tests/test_views.py diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 7c95fbe8007..3840eeb2570 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -2282,18 +2282,38 @@ class Model(models.AbstractModel): :returns: a form view as an lxml document :rtype: etree._Element """ - group = E.group(col="4") + sheet = E.sheet(string=self._description) + main_group = E.group() + left_group = E.group() + right_group = E.group() for fname, field in self._fields.items(): if field.automatic: continue elif field.type in ('one2many', 'many2many', 'text', 'html'): - group.append(E.newline()) - group.append(E.field(name=fname, colspan="4")) - group.append(E.newline()) + # append to sheet left and right group if needed + if len(left_group) > 0: + main_group.append(left_group) + left_group = E.group() + if len(right_group) > 0: + main_group.append(right_group) + right_group = E.group() + if len(main_group) > 0: + sheet.append(main_group) + main_group = E.group() + # add an oneline group for field type 'one2many', 'many2many', 'text', 'html' + sheet.append(E.group(E.field(name=fname))) else: - group.append(E.field(name=fname)) - group.append(E.separator()) - return E.form(E.sheet(group, string=self._description)) + if len(left_group) > len(right_group): + right_group.append(E.field(name=fname)) + else: + left_group.append(E.field(name=fname)) + if len(left_group) > 0: + main_group.append(left_group) + if len(right_group) > 0: + main_group.append(right_group) + sheet.append(main_group) + sheet.append(E.group(E.separator())) + return E.form(sheet) @api.model def _get_default_search_view(self): diff --git a/odoo/addons/test_new_api/tests/__init__.py b/odoo/addons/test_new_api/tests/__init__.py index 2f39b0a808d..1ce5b9940ac 100644 --- a/odoo/addons/test_new_api/tests/__init__.py +++ b/odoo/addons/test_new_api/tests/__init__.py @@ -15,4 +15,5 @@ from . import test_domain from . import test_schema from . import test_company_checks from . import test_unity_read +from . import test_views from . import test_web_read_group diff --git a/odoo/addons/test_new_api/tests/test_views.py b/odoo/addons/test_new_api/tests/test_views.py new file mode 100644 index 00000000000..51cb4705bb9 --- /dev/null +++ b/odoo/addons/test_new_api/tests/test_views.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import common +from lxml import etree + + +class TestDefaultView(common.TransactionCase): + + def test_default_form_view(self): + self.assertEqual( + etree.tostring(self.env['test_new_api.message']._get_default_form_view()), + b'
' + ) + self.assertEqual( + etree.tostring(self.env['test_new_api.creativework.edition']._get_default_form_view()), + b'
' + ) + self.assertEqual( + etree.tostring(self.env['test_new_api.mixed']._get_default_form_view()), + b'
' + )