summaryrefslogtreecommitdiff
path: root/django/db/models/base.py
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-05-11 13:06:03 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-05-11 13:06:03 +0000
commitf6b0f742d178d95fbd17a40869c6de453e8cfcf0 (patch)
treefad960733778e97c1f082c89213c447563532c22 /django/db/models/base.py
parent8d9bef9a464d52be56fd70c6dffc6a8fefd5e4b9 (diff)
Fixed #13513 -- Ensured that queries collecting deleted objects are issued on the right database, especially when dealing with m2m intermediate tables. Thanks to gavoja for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13232 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/base.py')
-rw-r--r--django/db/models/base.py7
1 files changed, 4 insertions, 3 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index a65fd70302..6304e009d3 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -588,20 +588,22 @@ class Model(object):
for related in self._meta.get_all_related_many_to_many_objects():
if related.field.rel.through:
+ db = router.db_for_write(related.field.rel.through.__class__, instance=self)
opts = related.field.rel.through._meta
reverse_field_name = related.field.m2m_reverse_field_name()
nullable = opts.get_field(reverse_field_name).null
filters = {reverse_field_name: self}
- for sub_obj in related.field.rel.through._base_manager.filter(**filters):
+ for sub_obj in related.field.rel.through._base_manager.using(db).filter(**filters):
sub_obj._collect_sub_objects(seen_objs, self, nullable)
for f in self._meta.many_to_many:
if f.rel.through:
+ db = router.db_for_write(f.rel.through.__class__, instance=self)
opts = f.rel.through._meta
field_name = f.m2m_field_name()
nullable = opts.get_field(field_name).null
filters = {field_name: self}
- for sub_obj in f.rel.through._base_manager.filter(**filters):
+ for sub_obj in f.rel.through._base_manager.using(db).filter(**filters):
sub_obj._collect_sub_objects(seen_objs, self, nullable)
else:
# m2m-ish but with no through table? GenericRelation: cascade delete
@@ -627,7 +629,6 @@ class Model(object):
def delete(self, using=None):
using = using or router.db_for_write(self.__class__, instance=self)
- connection = connections[using]
assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname)
# Find all the objects than need to be deleted.