summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/deletion.py5
-rw-r--r--tests/delete/tests.py11
2 files changed, 12 insertions, 4 deletions
diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
index 3385ed85c7..16dff6a1cd 100644
--- a/django/db/models/deletion.py
+++ b/django/db/models/deletion.py
@@ -296,10 +296,7 @@ class Collector:
try:
field.remote_field.on_delete(self, field, sub_objs, self.using)
except ProtectedError as error:
- key = "'%s.%s'" % (
- error.protected_objects[0].__class__.__name__,
- field.name,
- )
+ key = "'%s.%s'" % (field.model.__name__, field.name)
protected_objects[key] += error.protected_objects
if protected_objects:
raise ProtectedError(
diff --git a/tests/delete/tests.py b/tests/delete/tests.py
index 279788d2d3..1731342bc1 100644
--- a/tests/delete/tests.py
+++ b/tests/delete/tests.py
@@ -90,6 +90,17 @@ class OnDeleteTests(TestCase):
with self.assertRaisesMessage(ProtectedError, msg):
a.protect.delete()
+ def test_protect_path(self):
+ a = create_a('protect')
+ a.protect.p = P.objects.create()
+ a.protect.save()
+ msg = (
+ "Cannot delete some instances of model 'P' because they are "
+ "referenced through protected foreign keys: 'R.p'."
+ )
+ with self.assertRaisesMessage(ProtectedError, msg):
+ a.protect.p.delete()
+
def test_do_nothing(self):
# Testing DO_NOTHING is a bit harder: It would raise IntegrityError for a normal model,
# so we connect to pre_delete and set the fk to a known value.