mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +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 b13b8684a0 from main.
			
			
This commit is contained in:
		
							
								
								
									
										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 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/> | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user