diff --git a/odoo/addons/base/models/ir_fields.py b/odoo/addons/base/models/ir_fields.py index 0ed56061caa..ec556509d9e 100644 --- a/odoo/addons/base/models/ir_fields.py +++ b/odoo/addons/base/models/ir_fields.py @@ -604,7 +604,7 @@ class IrFieldsConverter(models.AbstractModel): def log(f, exception): if not isinstance(exception, Warning): current_field_name = self.env[field.comodel_name]._fields[f].string - arg0 = exception.args[0] % {'field': '%(field)s/' + current_field_name} + arg0 = exception.args[0].replace('%(field)s', '%(field)s/' + current_field_name) exception.args = (arg0, *exception.args[1:]) raise exception warnings.append(exception) diff --git a/odoo/addons/test_impex/tests/test_load.py b/odoo/addons/test_impex/tests/test_load.py index b9d365baf61..2a6b506c47d 100644 --- a/odoo/addons/test_impex/tests/test_load.py +++ b/odoo/addons/test_impex/tests/test_load.py @@ -1033,6 +1033,14 @@ class test_o2m(ImporterCase): [b] = self.browse() self.assertEqual(b.value.m2o.value, 101) + def test_escape_m2o_in_o2m(self): + result = self.import_(['value/m2o'], [['21%']]) + self.assertEqual(result['messages'], [message( + u"No matching record found for name '21%' " + u"in field 'Value/M2O'", moreinfo=moreaction( + res_model='export.integer'), + field_name='Value', field_path=['value', 'm2o'], field_type='name', value='21%')]) + class test_o2m_multiple(ImporterCase): model_name = 'export.one2many.multiple'