mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
#12135: Elegantly handle ProtectedError/RestrictedError exceptions
This commit is contained in:
parent
e4824db40b
commit
7cec4e9e22
@ -6,6 +6,7 @@ from django.contrib import messages
|
|||||||
from django.db import router, transaction
|
from django.db import router, transaction
|
||||||
from django.db.models import ProtectedError, RestrictedError
|
from django.db.models import ProtectedError, RestrictedError
|
||||||
from django.db.models.deletion import Collector
|
from django.db.models.deletion import Collector
|
||||||
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
@ -343,6 +344,19 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
|
|||||||
|
|
||||||
return dict(dependent_objects)
|
return dict(dependent_objects)
|
||||||
|
|
||||||
|
def _handle_protected_objects(self, obj, protected_objects, request, exc):
|
||||||
|
"""
|
||||||
|
Handle a ProtectedError or RestrictedError exception raised while attempt to resolve dependent objects.
|
||||||
|
"""
|
||||||
|
handle_protectederror(protected_objects, request, exc)
|
||||||
|
|
||||||
|
if is_htmx(request):
|
||||||
|
return HttpResponse(headers={
|
||||||
|
'HX-Redirect': obj.get_absolute_url(),
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
return redirect(obj.get_absolute_url())
|
||||||
|
|
||||||
#
|
#
|
||||||
# Request handlers
|
# Request handlers
|
||||||
#
|
#
|
||||||
@ -356,7 +370,13 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
|
|||||||
"""
|
"""
|
||||||
obj = self.get_object(**kwargs)
|
obj = self.get_object(**kwargs)
|
||||||
form = ConfirmationForm(initial=request.GET)
|
form = ConfirmationForm(initial=request.GET)
|
||||||
dependent_objects = self._get_dependent_objects(obj)
|
|
||||||
|
try:
|
||||||
|
dependent_objects = self._get_dependent_objects(obj)
|
||||||
|
except ProtectedError as e:
|
||||||
|
return self._handle_protected_objects(obj, e.protected_objects, request, e)
|
||||||
|
except RestrictedError as e:
|
||||||
|
return self._handle_protected_objects(obj, e.restricted_objects, request, e)
|
||||||
|
|
||||||
# If this is an HTMX request, return only the rendered deletion form as modal content
|
# If this is an HTMX request, return only the rendered deletion form as modal content
|
||||||
if is_htmx(request):
|
if is_htmx(request):
|
||||||
|
Loading…
Reference in New Issue
Block a user