mirror of
https://github.com/netbox-community/netbox.git
synced 2025-12-19 20:02:22 -06:00
* Closes #12135: Prevent the deletion of interfaces with children * Change PROTECT to RESTRICT * Extend handle_protectederror() to also handle RestrictedError * Fix string translation * Update migrations * Support bulk removal of parent interfaces via UI if all children are included * Add support for the bulk deletion of restricted objects via REST API
This commit is contained in:
@@ -1,16 +1,26 @@
|
||||
from django.contrib import messages
|
||||
from django.db.models import ProtectedError, RestrictedError
|
||||
from django.utils.html import escape
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
def handle_protectederror(obj_list, request, e):
|
||||
"""
|
||||
Generate a user-friendly error message in response to a ProtectedError exception.
|
||||
Generate a user-friendly error message in response to a ProtectedError or RestrictedError exception.
|
||||
"""
|
||||
protected_objects = list(e.protected_objects)
|
||||
protected_count = len(protected_objects) if len(protected_objects) <= 50 else 'More than 50'
|
||||
err_message = f"Unable to delete <strong>{', '.join(str(obj) for obj in obj_list)}</strong>. " \
|
||||
f"{protected_count} dependent objects were found: "
|
||||
if type(e) is ProtectedError:
|
||||
protected_objects = list(e.protected_objects)
|
||||
elif type(e) is RestrictedError:
|
||||
protected_objects = list(e.restricted_objects)
|
||||
else:
|
||||
raise e
|
||||
|
||||
# Formulate the error message
|
||||
err_message = _("Unable to delete <strong>{objects}</strong>. {count} dependent objects were found: ").format(
|
||||
objects=', '.join(str(obj) for obj in obj_list),
|
||||
count=len(protected_objects) if len(protected_objects) <= 50 else _('More than 50')
|
||||
)
|
||||
|
||||
# Append dependent objects to error message
|
||||
dependent_objects = []
|
||||
|
||||
Reference in New Issue
Block a user