mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -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.models import ProtectedError, RestrictedError
|
||||
from django.db.models.deletion import Collector
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils.html import escape
|
||||
@ -343,6 +344,19 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
|
||||
|
||||
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
|
||||
#
|
||||
@ -356,7 +370,13 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
|
||||
"""
|
||||
obj = self.get_object(**kwargs)
|
||||
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 is_htmx(request):
|
||||
|
Loading…
Reference in New Issue
Block a user