diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/base.py | 4 | ||||
| -rw-r--r-- | django/db/models/fields/related.py | 18 | ||||
| -rw-r--r-- | django/db/models/query.py | 5 | ||||
| -rw-r--r-- | django/db/models/signals.py | 10 |
4 files changed, 20 insertions, 17 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index 6304e009d3..07fc501ea0 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -456,7 +456,7 @@ class Model(object): meta = cls._meta if origin and not meta.auto_created: - signals.pre_save.send(sender=origin, instance=self, raw=raw) + signals.pre_save.send(sender=origin, instance=self, raw=raw, using=using) # If we are in a raw save, save the object exactly as presented. # That means that we don't try to be smart about saving attributes @@ -540,7 +540,7 @@ class Model(object): # Signal that the save is complete if origin and not meta.auto_created: signals.post_save.send(sender=origin, instance=self, - created=(not record_exists), raw=raw) + created=(not record_exists), raw=raw, using=using) save_base.alters_data = True diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 232d5d5e74..1634d7d974 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -566,7 +566,7 @@ def create_many_related_manager(superclass, rel=False): # duplicate data row for symmetrical reverse entries. signals.m2m_changed.send(sender=rel.through, action='pre_add', instance=self.instance, reverse=self.reverse, - model=self.model, pk_set=new_ids) + model=self.model, pk_set=new_ids, using=db) # Add the ones that aren't there already for obj_id in new_ids: self.through._default_manager.using(db).create(**{ @@ -578,7 +578,7 @@ def create_many_related_manager(superclass, rel=False): # duplicate data row for symmetrical reverse entries. signals.m2m_changed.send(sender=rel.through, action='post_add', instance=self.instance, reverse=self.reverse, - model=self.model, pk_set=new_ids) + model=self.model, pk_set=new_ids, using=db) def _remove_items(self, source_field_name, target_field_name, *objs): # source_col_name: the PK colname in join_table for the source object @@ -594,14 +594,16 @@ def create_many_related_manager(superclass, rel=False): old_ids.add(obj.pk) else: old_ids.add(obj) + # Work out what DB we're operating on + db = router.db_for_write(self.through.__class__, instance=self.instance) + # Send a signal to the other end if need be. if self.reverse or source_field_name == self.source_field_name: # Don't send the signal when we are deleting the # duplicate data row for symmetrical reverse entries. signals.m2m_changed.send(sender=rel.through, action="pre_remove", instance=self.instance, reverse=self.reverse, - model=self.model, pk_set=old_ids) + model=self.model, pk_set=old_ids, using=db) # Remove the specified objects from the join table - db = router.db_for_write(self.through.__class__, instance=self.instance) self.through._default_manager.using(db).filter(**{ source_field_name: self._pk_val, '%s__in' % target_field_name: old_ids @@ -611,17 +613,17 @@ def create_many_related_manager(superclass, rel=False): # duplicate data row for symmetrical reverse entries. signals.m2m_changed.send(sender=rel.through, action="post_remove", instance=self.instance, reverse=self.reverse, - model=self.model, pk_set=old_ids) + model=self.model, pk_set=old_ids, using=db) def _clear_items(self, source_field_name): + db = router.db_for_write(self.through.__class__, instance=self.instance) # source_col_name: the PK colname in join_table for the source object if self.reverse or source_field_name == self.source_field_name: # Don't send the signal when we are clearing the # duplicate data rows for symmetrical reverse entries. signals.m2m_changed.send(sender=rel.through, action="pre_clear", instance=self.instance, reverse=self.reverse, - model=self.model, pk_set=None) - db = router.db_for_write(self.through.__class__, instance=self.instance) + model=self.model, pk_set=None, using=db) self.through._default_manager.using(db).filter(**{ source_field_name: self._pk_val }).delete() @@ -630,7 +632,7 @@ def create_many_related_manager(superclass, rel=False): # duplicate data rows for symmetrical reverse entries. signals.m2m_changed.send(sender=rel.through, action="post_clear", instance=self.instance, reverse=self.reverse, - model=self.model, pk_set=None) + model=self.model, pk_set=None, using=db) return ManyRelatedManager diff --git a/django/db/models/query.py b/django/db/models/query.py index d9fbd9b8cb..9ecfb745fd 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -1311,7 +1311,8 @@ def delete_objects(seen_objs, using): # Pre-notify all instances to be deleted. for pk_val, instance in items: if not cls._meta.auto_created: - signals.pre_delete.send(sender=cls, instance=instance) + signals.pre_delete.send(sender=cls, instance=instance, + using=using) pk_list = [pk for pk,instance in items] @@ -1343,7 +1344,7 @@ def delete_objects(seen_objs, using): setattr(instance, field.attname, None) if not cls._meta.auto_created: - signals.post_delete.send(sender=cls, instance=instance) + signals.post_delete.send(sender=cls, instance=instance, using=using) setattr(instance, cls._meta.pk.attname, None) if forced_managed: diff --git a/django/db/models/signals.py b/django/db/models/signals.py index cd0350bc01..48872e7e7f 100644 --- a/django/db/models/signals.py +++ b/django/db/models/signals.py @@ -5,12 +5,12 @@ class_prepared = Signal(providing_args=["class"]) pre_init = Signal(providing_args=["instance", "args", "kwargs"]) post_init = Signal(providing_args=["instance"]) -pre_save = Signal(providing_args=["instance", "raw"]) -post_save = Signal(providing_args=["instance", "raw", "created"]) +pre_save = Signal(providing_args=["instance", "raw", "using"]) +post_save = Signal(providing_args=["instance", "raw", "created", "using"]) -pre_delete = Signal(providing_args=["instance"]) -post_delete = Signal(providing_args=["instance"]) +pre_delete = Signal(providing_args=["instance", "using"]) +post_delete = Signal(providing_args=["instance", "using"]) post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"]) -m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set"]) +m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set", "using"]) |
