diff --git a/tests/model_inheritance/models.py b/tests/model_inheritance/models.py index a479faeda52..dc0e238f7ec 100644 --- a/tests/model_inheritance/models.py +++ b/tests/model_inheritance/models.py @@ -110,6 +110,10 @@ class Supplier(Place): customers = models.ManyToManyField(Restaurant, related_name="provider") +class CustomSupplier(Supplier): + pass + + class ParkingLot(Place): # An explicit link to the parent (we can control the attribute name). parent = models.OneToOneField( diff --git a/tests/model_inheritance/tests.py b/tests/model_inheritance/tests.py index d53a4f3257a..4542e6c3cc0 100644 --- a/tests/model_inheritance/tests.py +++ b/tests/model_inheritance/tests.py @@ -10,6 +10,7 @@ from .models import ( Base, Chef, CommonInfo, + CustomSupplier, GrandChild, GrandParent, ItalianRestaurant, @@ -191,6 +192,22 @@ class ModelInheritanceTests(TestCase): sql = query["sql"] self.assertIn("INSERT INTO", sql, sql) + def test_create_copy_with_inherited_m2m(self): + restaurant = Restaurant.objects.create() + supplier = CustomSupplier.objects.create( + name="Central market", address="944 W. Fullerton" + ) + supplier.customers.set([restaurant]) + old_customers = supplier.customers.all() + supplier.pk = None + supplier.id = None + supplier._state.adding = True + supplier.save() + supplier.customers.set(old_customers) + supplier = Supplier.objects.get(pk=supplier.pk) + self.assertCountEqual(supplier.customers.all(), old_customers) + self.assertSequenceEqual(supplier.customers.all(), [restaurant]) + def test_eq(self): # Equality doesn't transfer in multitable inheritance. self.assertNotEqual(Place(id=1), Restaurant(id=1))