From e059bbec96ed85d5f4d63893d687c8af966430c8 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 16 Sep 2025 10:57:32 -0400 Subject: [PATCH] Refs #27222 -- Deduplicated db_returning fields in Model.save(). Follow-up to 94680437a45a71c70ca8bd2e68b72aa1e2eff337. --- django/db/models/base.py | 3 ++- tests/queries/test_db_returning.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/db/models/base.py b/django/db/models/base.py index 358a744675..82ea520065 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -1153,7 +1153,8 @@ class Model(AltersData, metaclass=ModelBase): getattr(self, field.attname) if raw else field.pre_save(self, False) ) if hasattr(value, "resolve_expression"): - returning_fields.append(field) + if field not in returning_fields: + returning_fields.append(field) elif field.db_returning: returning_fields.remove(field) results = self._do_insert( diff --git a/tests/queries/test_db_returning.py b/tests/queries/test_db_returning.py index 50c164a57f..06efe023e1 100644 --- a/tests/queries/test_db_returning.py +++ b/tests/queries/test_db_returning.py @@ -42,6 +42,16 @@ class ReturningValuesTests(TestCase): ), captured_queries[-1]["sql"], ) + self.assertEqual( + captured_queries[-1]["sql"] + .split("RETURNING ")[1] + .count( + connection.ops.quote_name( + ReturningModel._meta.get_field("created").column + ), + ), + 1, + ) self.assertTrue(obj.pk) self.assertIsInstance(obj.created, datetime.datetime)