From 57c2e5da710b583110d8c7c20e91774a61d7472f Mon Sep 17 00:00:00 2001
From: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Date: Wed, 2 Nov 2022 12:30:16 +0100
Subject: [PATCH] Refs #33984 -- Added test for creating copies of model
 instances with inherited m2m fields.

---
 tests/model_inheritance/models.py |  4 ++++
 tests/model_inheritance/tests.py  | 17 +++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/tests/model_inheritance/models.py b/tests/model_inheritance/models.py
index a479faeda5..dc0e238f7e 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 d53a4f3257..4542e6c3cc 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))