summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2025-11-07 09:57:31 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2025-12-17 18:37:18 +0100
commit6fc2406fc534f97f245b8267703ab598a020fee5 (patch)
treecdf9cecf14d8c83503958f7e8a5feebbc4ac535f
parentc3b6c2969171d8867308406bb03d60f86a422904 (diff)
Refs #27380 -- Made ManyRelatedManager.set() use *_base() hooks.
-rw-r--r--django/db/models/fields/related_descriptors.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py
index 6056af3660..866fc58fc2 100644
--- a/django/db/models/fields/related_descriptors.py
+++ b/django/db/models/fields/related_descriptors.py
@@ -1359,9 +1359,10 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
db = router.db_for_write(self.through, instance=self.instance)
with transaction.atomic(using=db, savepoint=False):
+ self._remove_prefetched_objects()
if clear:
- self.clear()
- self.add(*objs, through_defaults=through_defaults)
+ self._clear_base(using=db)
+ self._add_base(*objs, through_defaults=through_defaults, using=db)
else:
old_ids = set(
self.using(db).values_list(
@@ -1381,8 +1382,10 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
else:
new_objs.append(obj)
- self.remove(*old_ids)
- self.add(*new_objs, through_defaults=through_defaults)
+ self._remove_base(*old_ids, using=db)
+ self._add_base(
+ *new_objs, through_defaults=through_defaults, using=db
+ )
set.alters_data = True