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.