Author: ramiro
Date: 2011-01-14 17:30:17 -0600 (Fri, 14 Jan 2011)
New Revision: 15207

Modified:
   django/branches/releases/1.2.X/django/db/models/base.py
   
django/branches/releases/1.2.X/tests/regressiontests/multiple_database/tests.py
Log:
[1.2.X] Fixed #14948 -- Fixed a couple of cases where invalid model classes 
were passed to the database router when collecting reverse foreign key and many 
to many relationships. Thanks shell_dweller for the report and Harm Geerts for 
the patch.

This also enhances tests added in r15186.

Code in SVN trunk doesn't suffer from this problem because it was refactored in 
r14507.

Modified: django/branches/releases/1.2.X/django/db/models/base.py
===================================================================
--- django/branches/releases/1.2.X/django/db/models/base.py     2011-01-14 
23:19:50 UTC (rev 15206)
+++ django/branches/releases/1.2.X/django/db/models/base.py     2011-01-14 
23:30:17 UTC (rev 15207)
@@ -612,7 +612,7 @@
 
         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 @@
 
         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

Modified: 
django/branches/releases/1.2.X/tests/regressiontests/multiple_database/tests.py
===================================================================
--- 
django/branches/releases/1.2.X/tests/regressiontests/multiple_database/tests.py 
    2011-01-14 23:19:50 UTC (rev 15206)
+++ 
django/branches/releases/1.2.X/tests/regressiontests/multiple_database/tests.py 
    2011-01-14 23:30:17 UTC (rev 15207)
@@ -1739,7 +1739,7 @@
         if not hasattr(model, '_meta'):
             raise ValueError
 
-class RouterM2MThroughTestCase(TestCase):
+class RouterModelArgumentTestCase(TestCase):
     multi_db = True
 
     def setUp(self):
@@ -1749,7 +1749,7 @@
     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 @@
         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()

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to