[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) <app@odoo.com>
Signed-off-by: Romain Estievenart (res) <res@odoo.com>
This commit is contained in:
Romain Estievenart
2023-08-31 18:53:17 +00:00
parent 41d07e9d38
commit b5e5a922d4
3 changed files with 50 additions and 7 deletions
+27 -7
View File
@@ -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):
@@ -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
@@ -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'<form><sheet string="Test New API Message"><group><group><field name="discussion"/></group></group><group><field name="body"/></group><group><group><field name="author"/><field name="display_name"/><field name="double_size"/><field name="author_partner"/><field name="label"/><field name="active"/></group><group><field name="name"/><field name="size"/><field name="discussion_name"/><field name="important"/><field name="priority"/><field name="attributes"/></group></group><group><separator/></group></sheet></form>'
)
self.assertEqual(
etree.tostring(self.env['test_new_api.creativework.edition']._get_default_form_view()),
b'<form><sheet string="Test New API Creative Work Edition"><group><group><field name="name"/><field name="res_model_id"/></group><group><field name="res_id"/><field name="res_model"/></group></group><group><separator/></group></sheet></form>'
)
self.assertEqual(
etree.tostring(self.env['test_new_api.mixed']._get_default_form_view()),
b'<form><sheet string="Test New API Mixed"><group><group><field name="number"/><field name="date"/><field name="now"/><field name="reference"/></group><group><field name="number2"/><field name="moment"/><field name="lang"/></group></group><group><field name="comment1"/></group><group><field name="comment2"/></group><group><field name="comment3"/></group><group><field name="comment4"/></group><group><field name="comment5"/></group><group><group><field name="currency_id"/></group><group><field name="amount"/></group></group><group><separator/></group></sheet></form>'
)