瀏覽代碼

Refs #33984 -- Added test for creating copies of model instances with inherited m2m fields.

Mariusz Felisiak 2 年之前
父節點
當前提交
57c2e5da71
共有 2 個文件被更改,包括 21 次插入0 次删除
  1. 4 0
      tests/model_inheritance/models.py
  2. 17 0
      tests/model_inheritance/tests.py

+ 4 - 0
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(

+ 17 - 0
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))