1
0
mirror of https://github.com/django/django.git synced 2025-03-06 15:32:33 +00:00

[5.2.x] Fixed #36061 -- Added migration support for ManyToManyField.through_fields.

Added through_fields support to ManyToManyField.deconstruct.
Thanks to Simon Charette for pointers and the review.

Backport of b13b8684a04d0bc1081104c5973c62c27dc673b0 from main.
This commit is contained in:
brian 2025-01-06 17:50:44 -08:00 committed by Sarah Boyce
parent 8aea6b802c
commit b96e4c04b6
3 changed files with 20 additions and 0 deletions

View File

@ -180,6 +180,7 @@ answer newbie questions, and generally made Django that much better:
Brian Fabian Crain <http://www.bfc.do/>
Brian Harring <ferringb@gmail.com>
Brian Helba <brian.helba@kitware.com>
Brian Nettleton <bdnettleton@gmail.com>
Brian Ray <http://brianray.chipy.org/>
Brian Rosner <brosner@gmail.com>
Bruce Kroeze <https://coderseye.com/>

View File

@ -1819,6 +1819,8 @@ class ManyToManyField(RelatedField):
kwargs["through"] = self.remote_field.through
elif not self.remote_field.through._meta.auto_created:
kwargs["through"] = self.remote_field.through._meta.label
if through_fields := getattr(self.remote_field, "through_fields", None):
kwargs["through_fields"] = through_fields
# If swappable is True, then see if we're actually pointing to the target
# of a swap.
swappable_setting = self.swappable_setting

View File

@ -516,6 +516,23 @@ class FieldDeconstructionTests(SimpleTestCase):
self.assertEqual(path, "django.db.models.ManyToManyField")
self.assertEqual(args, [])
self.assertEqual(kwargs, {"to": "auth.permission", "through": "auth.Group"})
# Test through_fields
field = models.ManyToManyField(
"auth.Permission",
through="auth.Group",
through_fields=("foo", "permissions"),
)
name, path, args, kwargs = field.deconstruct()
self.assertEqual(path, "django.db.models.ManyToManyField")
self.assertEqual(args, [])
self.assertEqual(
kwargs,
{
"to": "auth.permission",
"through": "auth.Group",
"through_fields": ("foo", "permissions"),
},
)
# Test custom db_table
field = models.ManyToManyField("auth.Permission", db_table="custom_table")
name, path, args, kwargs = field.deconstruct()