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'
' + )