diff --git a/trytond/trytond/model/modelstorage.py b/trytond/trytond/model/modelstorage.py index f90bcd62d9..0cf814540d 100644 --- a/trytond/trytond/model/modelstorage.py +++ b/trytond/trytond/model/modelstorage.py @@ -1207,7 +1207,9 @@ class ModelStorage(Model): Relation = field.get_target() elif field._type == 'reference': value = getattr(record, field.name) - Relation = value.__class__ if value else None + Relation = ( + value.__class__ if isinstance(value, ModelStorage) + else None) else: Relation = cls return Relation diff --git a/trytond/trytond/tests/test_field_reference.py b/trytond/trytond/tests/test_field_reference.py index ac2b43fb32..5077bd1ea0 100644 --- a/trytond/trytond/tests/test_field_reference.py +++ b/trytond/trytond/tests/test_field_reference.py @@ -510,6 +510,28 @@ class FieldReferenceTestCase(unittest.TestCase): }]) self.assertEqual(reference.reference, None) + @with_transaction() + def test_domain_no_id_value(self): + "Test reference with domain and no id" + pool = Pool() + Reference = pool.get('test.reference_domainvalidation') + + reference, = Reference.create([{ + 'reference': 'test.reference.target,', + }]) + self.assertEqual(reference.reference, 'test.reference.target,') + + @with_transaction() + def test_domain_negative_id_value(self): + "Test reference with domain and negative id" + pool = Pool() + Reference = pool.get('test.reference_domainvalidation') + + reference, = Reference.create([{ + 'reference': 'test.reference.target,-1', + }]) + self.assertEqual(reference.reference, 'test.reference.target,-1') + @with_transaction() def test_domain_different_targets(self): "Test reference with domain and different targets" @@ -544,6 +566,28 @@ class FieldReferenceTestCase(unittest.TestCase): }]) self.assertEqual(reference.reference, target) + @with_transaction() + def test_domain_pyson_no_id_value(self): + "Test reference with pyson domain and no id" + pool = Pool() + Reference = pool.get('test.reference_domainvalidation_pyson') + + reference, = Reference.create([{ + 'reference': 'test.reference.target,', + }]) + self.assertEqual(reference.reference, 'test.reference.target,') + + @with_transaction() + def test_domain_pyson_negative_id_value(self): + "Test reference with pyson domain and negative id" + pool = Pool() + Reference = pool.get('test.reference_domainvalidation_pyson') + + reference, = Reference.create([{ + 'reference': 'test.reference.target,-1', + }]) + self.assertEqual(reference.reference, 'test.reference.target,-1') + @with_transaction() def test_domain_pyson_different_targets(self): "Test reference with pyson domain and different targets"