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:
parent
8aea6b802c
commit
b96e4c04b6
1
AUTHORS
1
AUTHORS
@ -180,6 +180,7 @@ answer newbie questions, and generally made Django that much better:
|
|||||||
Brian Fabian Crain <http://www.bfc.do/>
|
Brian Fabian Crain <http://www.bfc.do/>
|
||||||
Brian Harring <ferringb@gmail.com>
|
Brian Harring <ferringb@gmail.com>
|
||||||
Brian Helba <brian.helba@kitware.com>
|
Brian Helba <brian.helba@kitware.com>
|
||||||
|
Brian Nettleton <bdnettleton@gmail.com>
|
||||||
Brian Ray <http://brianray.chipy.org/>
|
Brian Ray <http://brianray.chipy.org/>
|
||||||
Brian Rosner <brosner@gmail.com>
|
Brian Rosner <brosner@gmail.com>
|
||||||
Bruce Kroeze <https://coderseye.com/>
|
Bruce Kroeze <https://coderseye.com/>
|
||||||
|
@ -1819,6 +1819,8 @@ class ManyToManyField(RelatedField):
|
|||||||
kwargs["through"] = self.remote_field.through
|
kwargs["through"] = self.remote_field.through
|
||||||
elif not self.remote_field.through._meta.auto_created:
|
elif not self.remote_field.through._meta.auto_created:
|
||||||
kwargs["through"] = self.remote_field.through._meta.label
|
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
|
# If swappable is True, then see if we're actually pointing to the target
|
||||||
# of a swap.
|
# of a swap.
|
||||||
swappable_setting = self.swappable_setting
|
swappable_setting = self.swappable_setting
|
||||||
|
@ -516,6 +516,23 @@ class FieldDeconstructionTests(SimpleTestCase):
|
|||||||
self.assertEqual(path, "django.db.models.ManyToManyField")
|
self.assertEqual(path, "django.db.models.ManyToManyField")
|
||||||
self.assertEqual(args, [])
|
self.assertEqual(args, [])
|
||||||
self.assertEqual(kwargs, {"to": "auth.permission", "through": "auth.Group"})
|
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
|
# Test custom db_table
|
||||||
field = models.ManyToManyField("auth.Permission", db_table="custom_table")
|
field = models.ManyToManyField("auth.Permission", db_table="custom_table")
|
||||||
name, path, args, kwargs = field.deconstruct()
|
name, path, args, kwargs = field.deconstruct()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user