diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
index 3bdd89cbd9..4d3823b3dd 100644
--- a/django/db/models/deletion.py
+++ b/django/db/models/deletion.py
@@ -305,7 +305,7 @@ class Collector:
                     model.__name__,
                     ', '.join(protected_objects),
                 ),
-                chain.from_iterable(protected_objects.values()),
+                list(chain.from_iterable(protected_objects.values())),
             )
         for related_model, related_fields in model_fast_deletes.items():
             batches = self.get_del_batches(new_objs, related_fields)
@@ -340,7 +340,7 @@ class Collector:
                             model.__name__,
                             ', '.join(restricted_objects),
                         ),
-                        chain.from_iterable(restricted_objects.values()),
+                        list(chain.from_iterable(restricted_objects.values())),
                     )
 
     def related_objects(self, related_model, related_fields, objs):
diff --git a/tests/delete/tests.py b/tests/delete/tests.py
index 485ae1aaf5..7bcedcf91c 100644
--- a/tests/delete/tests.py
+++ b/tests/delete/tests.py
@@ -76,18 +76,26 @@ class OnDeleteTests(TestCase):
             "referenced through protected foreign keys: 'A.protect'."
         )
         with self.assertRaisesMessage(ProtectedError, msg):
-            a.protect.delete()
+            try:
+                a.protect.delete()
+            except ProtectedError as exc:
+                self.assertEqual(set(exc.protected_objects), {a})
+                raise
 
     def test_protect_multiple(self):
         a = create_a('protect')
-        B.objects.create(protect=a.protect)
+        b = B.objects.create(protect=a.protect)
         msg = (
             "Cannot delete some instances of model 'R' because they are "
             "referenced through protected foreign keys: 'A.protect', "
             "'B.protect'."
         )
         with self.assertRaisesMessage(ProtectedError, msg):
-            a.protect.delete()
+            try:
+                a.protect.delete()
+            except ProtectedError as exc:
+                self.assertEqual(set(exc.protected_objects), {a, b})
+                raise
 
     def test_protect_path(self):
         a = create_a('protect')
@@ -177,18 +185,26 @@ class OnDeleteTests(TestCase):
             "referenced through restricted foreign keys: 'A.restrict'."
         )
         with self.assertRaisesMessage(RestrictedError, msg):
-            a.restrict.delete()
+            try:
+                a.restrict.delete()
+            except RestrictedError as exc:
+                self.assertEqual(set(exc.restricted_objects), {a})
+                raise
 
     def test_restrict_multiple(self):
         a = create_a('restrict')
-        B3.objects.create(restrict=a.restrict)
+        b = B3.objects.create(restrict=a.restrict)
         msg = (
             "Cannot delete some instances of model 'R' because they are "
             "referenced through restricted foreign keys: 'A.restrict', "
             "'B3.restrict'."
         )
         with self.assertRaisesMessage(RestrictedError, msg):
-            a.restrict.delete()
+            try:
+                a.restrict.delete()
+            except RestrictedError as exc:
+                self.assertEqual(set(exc.restricted_objects), {a, b})
+                raise
 
     def test_restrict_path_cascade_indirect(self):
         a = create_a('restrict')
