From a91b53ed1d98c2fe95f78cc9b4f4b79e25a93812 Mon Sep 17 00:00:00 2001 From: Xavier ALT Date: Tue, 2 Aug 2022 14:28:01 +0000 Subject: [PATCH] [FIX] base: fix qweb t-field with default value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since 5913b7265ef5bd8a01a882fa0977bbd64321054d it was not possible anymore to use default value with `t-field`, this commit restore the previous behavior. closes odoo/odoo#98453 X-original-commit: 12dc2353f572d097fc57ec723a11651a8471fdf5 Signed-off-by: Rémy Voet --- odoo/addons/base/models/ir_qweb.py | 3 +- odoo/addons/base/tests/test_qweb.py | 44 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/odoo/addons/base/models/ir_qweb.py b/odoo/addons/base/models/ir_qweb.py index c8f66affa19..1f7782a1ba4 100644 --- a/odoo/addons/base/models/ir_qweb.py +++ b/odoo/addons/base/models/ir_qweb.py @@ -1931,7 +1931,8 @@ class IrQWeb(models.AbstractModel): values['__qweb_attrs__'] = field_attrs else: values['__qweb_attrs__'].update(field_attrs) - content = self._compile_to_str(content) + if content is not None and content is not False: + content = self._compile_to_str(content) """, level)) force_display_dependent = True else: diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py index fbc0911c9a9..28341bcda7a 100644 --- a/odoo/addons/base/tests/test_qweb.py +++ b/odoo/addons/base/tests/test_qweb.py @@ -100,6 +100,50 @@ class TestQWebTField(TransactionCase): doc = etree.fromstring(rendered) self.assertEqual(len(doc.xpath('//script')), 1) + def test_default_value(self): + Partner = self.env['res.partner'] + t = self.env['ir.ui.view'].create({ + 'name': 'test', + 'type': 'qweb', + 'arch_db': ''' +
+ DEFAULT + +
+
''', + }) + + # record.name is non-empty + result = """ +
My Company
+ """ + rendered = self.env['ir.qweb']._render(t.id, { + 'record': Partner.new({'name': 'My Company'}) + }) + self.assertEqual(str(rendered.strip()), result.strip(), "") + + # record.name is empty but not False or None, we should render depending on force_display + result = """ +
+ """ + rendered = self.env['ir.qweb']._render(t.id, { + 'record': Partner.new({'name': ''}) + }) + self.assertEqual(str(rendered.strip()), result.strip()) + + # record.name is False or None, we should render field default value + result = """ +
+ DEFAULT + Text +
+ """ + rendered = self.env['ir.qweb']._render(t.id, { + 'record': Partner.new({}) + }) + self.assertEqual(str(rendered.strip()), result.strip()) + + class TestQWebNS(TransactionCase): def test_render_static_xml_with_namespace(self): """ Test the rendering on a namespaced view with no static content. The resulting string should be untouched.