Browse Source

Fixed #23101 db_table wasn't copied in deconstruct

Forward port of 999758fc7a2d6fcb01eb40de937d4420f884788d from
stable/1.7.x
Abraham Martin 10 years ago
parent
commit
e1347e9253
2 changed files with 8 additions and 0 deletions
  1. 2 0
      django/db/models/fields/related.py
  2. 6 0
      tests/field_deconstruction/tests.py

+ 2 - 0
django/db/models/fields/related.py

@@ -2138,6 +2138,8 @@ class ManyToManyField(RelatedField):
     def deconstruct(self):
         name, path, args, kwargs = super(ManyToManyField, self).deconstruct()
         # Handle the simpler arguments
+        if self.db_table is not None:
+            kwargs['db_table'] = self.db_table
         if self.rel.db_constraint is not True:
             kwargs['db_constraint'] = self.rel.db_constraint
         if "help_text" in kwargs:

+ 6 - 0
tests/field_deconstruction/tests.py

@@ -271,6 +271,12 @@ class FieldDeconstructionTests(TestCase):
         self.assertEqual(path, "django.db.models.ManyToManyField")
         self.assertEqual(args, [])
         self.assertEqual(kwargs, {"to": "auth.Permission", "through": "auth.Group"})
+        # Test custom db_table
+        field = models.ManyToManyField("auth.Permission", db_table="custom_table")
+        name, path, args, kwargs = field.deconstruct()
+        self.assertEqual(path, "django.db.models.ManyToManyField")
+        self.assertEqual(args, [])
+        self.assertEqual(kwargs, {"to": "auth.Permission", "db_table": "custom_table"})
 
     @override_settings(AUTH_USER_MODEL="auth.Permission")
     def test_many_to_many_field_swapped(self):