diff --git a/odoo/addons/base/models/ir_fields.py b/odoo/addons/base/models/ir_fields.py index b258d553bf2..fa0ee7f200f 100644 --- a/odoo/addons/base/models/ir_fields.py +++ b/odoo/addons/base/models/ir_fields.py @@ -432,18 +432,16 @@ class IrFieldsConverter(models.AbstractModel): field_type = _(u"database id") if isinstance(value, str) and not self._str_to_boolean(model, field, value)[0]: return False, field_type, warnings - try: tentative_id = int(value) - except ValueError: tentative_id = value try: - if RelatedModel.search([('id', '=', tentative_id)]): - id = tentative_id - except psycopg2.DataError: - # type error + tentative_id = int(value) + except ValueError: raise self._format_import_error( ValueError, _(u"Invalid database id '%s' for the field '%%(field)s'"), value, {'moreinfo': action}) + if RelatedModel.browse(tentative_id).exists(): + id = tentative_id elif subfield == 'id': field_type = _(u"external id") if not self._str_to_boolean(model, field, value)[0]: diff --git a/odoo/addons/test_impex/tests/test_load.py b/odoo/addons/test_impex/tests/test_load.py index 00a25ab0f4b..4dfb344bce8 100644 --- a/odoo/addons/test_impex/tests/test_load.py +++ b/odoo/addons/test_impex/tests/test_load.py @@ -706,6 +706,13 @@ class test_m2o(ImporterCase): u"name, external id or database id")]) self.assertIs(result['ids'], False) + def test_fail_id(self): + record = self.env['export.integer'].create({'value': 42}) + result = self.import_(['value/.id'], [["lorem"], [record.id]]) + self.assertFalse(result['ids']) + self.assertTrue(result['messages']) + self.assertEqual(result['messages'][0]['message'], "Invalid database id 'lorem' for the field 'Value'") + def test_name_create_enabled_m2o(self): result = self.import_(['value'], [[101]]) self.assertEqual(result['messages'], [message(