diff --git a/django/db/models/base.py b/django/db/models/base.py index 60b98ec739..462483d058 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -612,7 +612,7 @@ 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) + db = router.db_for_write(related.field.rel.through, 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 @@ -622,7 +622,7 @@ class Model(object): for f in self._meta.many_to_many: if f.rel.through: - db = router.db_for_write(f.rel.through.__class__, instance=self) + db = router.db_for_write(f.rel.through, instance=self) opts = f.rel.through._meta field_name = f.m2m_field_name() nullable = opts.get_field(field_name).null diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py index c0bcedf0aa..052396bd75 100644 --- a/tests/regressiontests/multiple_database/tests.py +++ b/tests/regressiontests/multiple_database/tests.py @@ -1739,7 +1739,7 @@ class ModelMetaRouter(object): if not hasattr(model, '_meta'): raise ValueError -class RouterM2MThroughTestCase(TestCase): +class RouterModelArgumentTestCase(TestCase): multi_db = True def setUp(self): @@ -1749,7 +1749,7 @@ class RouterM2MThroughTestCase(TestCase): def tearDown(self): router.routers = self.old_routers - def test_m2m_through(self): + def test_m2m_collection(self): b = Book.objects.create(title="Pro Django", published=datetime.date(2008, 12, 16)) @@ -1760,3 +1760,13 @@ class RouterM2MThroughTestCase(TestCase): b.authors.remove(p) # test clear b.authors.clear() + # test setattr + b.authors = [p] + # Test M2M collection (_collect_sub_objects() in Django <= 1.2.X) + b.delete() + + def test_foreignkey_collection(self): + person = Person.objects.create(name='Bob') + pet = Pet.objects.create(owner=person, name='Wart') + # Test related FK collection (_collect_sub_objects() in Django <= 1.2.X) + person.delete()