6
6
from django .db import router , transaction
7
7
from django .db .models import ProtectedError , RestrictedError
8
8
from django .db .models .deletion import Collector
9
+ from django .http import HttpResponse
9
10
from django .shortcuts import redirect , render
10
11
from django .urls import reverse
11
12
from django .utils .html import escape
@@ -343,6 +344,19 @@ def _get_dependent_objects(self, obj):
343
344
344
345
return dict (dependent_objects )
345
346
347
+ def _handle_protected_objects (self , obj , protected_objects , request , exc ):
348
+ """
349
+ Handle a ProtectedError or RestrictedError exception raised while attempt to resolve dependent objects.
350
+ """
351
+ handle_protectederror (protected_objects , request , exc )
352
+
353
+ if is_htmx (request ):
354
+ return HttpResponse (headers = {
355
+ 'HX-Redirect' : obj .get_absolute_url (),
356
+ })
357
+ else :
358
+ return redirect (obj .get_absolute_url ())
359
+
346
360
#
347
361
# Request handlers
348
362
#
@@ -356,7 +370,13 @@ def get(self, request, *args, **kwargs):
356
370
"""
357
371
obj = self .get_object (** kwargs )
358
372
form = ConfirmationForm (initial = request .GET )
359
- dependent_objects = self ._get_dependent_objects (obj )
373
+
374
+ try :
375
+ dependent_objects = self ._get_dependent_objects (obj )
376
+ except ProtectedError as e :
377
+ return self ._handle_protected_objects (obj , e .protected_objects , request , e )
378
+ except RestrictedError as e :
379
+ return self ._handle_protected_objects (obj , e .restricted_objects , request , e )
360
380
361
381
# If this is an HTMX request, return only the rendered deletion form as modal content
362
382
if is_htmx (request ):
0 commit comments