From be5d4fcfc4e794be998b55aa8c0bf360f9c396d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 22 Dec 2024 17:24:22 +0100 Subject: [PATCH] Do not compute record name for negative id With ba6b8ce0e692 the record name of default values are also computed for one2one and reference but reference fields can have a default value with only the model part by using a negative id. In this case we should not compute a record name. --- trytond/trytond/model/model.py | 3 ++- trytond/trytond/tests/model.py | 3 +++ trytond/trytond/tests/test_model.py | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/trytond/trytond/model/model.py b/trytond/trytond/model/model.py index a3fb609526..fede417cff 100644 --- a/trytond/trytond/model/model.py +++ b/trytond/trytond/model/model.py @@ -170,10 +170,11 @@ class Model(URLMixin, PoolBase, metaclass=ModelMeta): if field._type == 'reference': target_name, target_id = value.split(',') Target = pool.get(target_name) + target_id = int(target_id) else: Target = field.get_target() target_id = value - if 'rec_name' in Target._fields: + if 'rec_name' in Target._fields and target_id >= 0: target = Target(target_id) values.setdefault( field_name + '.', {})['rec_name'] = target.rec_name diff --git a/trytond/trytond/tests/model.py b/trytond/trytond/tests/model.py index a00db1d383..2666c52395 100644 --- a/trytond/trytond/tests/model.py +++ b/trytond/trytond/tests/model.py @@ -69,6 +69,9 @@ class ModelDefault(Model): name = fields.Char("Name") description = fields.Char("Description") target = fields.Many2One('test.model', "Target") + reference = fields.Reference("Reference", [ + ('test.model', "Model"), + ]) @classmethod def default_description(cls): diff --git a/trytond/trytond/tests/test_model.py b/trytond/trytond/tests/test_model.py index 2594712b5a..a8c5f974cf 100644 --- a/trytond/trytond/tests/test_model.py +++ b/trytond/trytond/tests/test_model.py @@ -374,6 +374,18 @@ class ModelTestCase(TestCase): }, }) + @with_transaction() + def test_default_get_with_model_reference_rec_name(self): + "Test default_get with model reference and rec_name" + pool = Pool() + Model = pool.get('test.model.default') + + with Transaction().set_context(default_reference='test.model,-1'): + self.assertEqual( + Model.default_get(['reference'], with_rec_name=True), { + 'reference': 'test.model,-1', + }) + @with_transaction() def test_default_get_without_rec_name(self): "Test default_get without rec_name"