diff options
| author | brian <bdnettleton@gmail.com> | 2025-01-06 17:50:44 -0800 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-02-06 15:26:12 +0100 |
| commit | b13b8684a04d0bc1081104c5973c62c27dc673b0 (patch) | |
| tree | 876d87eaa2381e9552067abe12001a2a25f47182 | |
| parent | 2598b371a93e21d84b7a2a99b2329535c8c0c138 (diff) | |
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.
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/db/models/fields/related.py | 2 | ||||
| -rw-r--r-- | tests/field_deconstruction/tests.py | 17 |
3 files changed, 20 insertions, 0 deletions
@@ -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/> diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 2f12f993e8..6a9cb12a90 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -1796,6 +1796,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 diff --git a/tests/field_deconstruction/tests.py b/tests/field_deconstruction/tests.py index 3b10ee0091..41353cbaaf 100644 --- a/tests/field_deconstruction/tests.py +++ b/tests/field_deconstruction/tests.py @@ -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() |
