diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index f0e50c7ab..478b7818f 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -321,6 +321,30 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView): def get_required_permission(self): return get_permission_for_model(self.queryset.model, 'delete') + def _get_dependent_objects(self, obj): + """ + Returns a dict of dependent objects, model names as primary key, inside each two keys exist name and items (list) + + Args: + obj: The object to return dependent objects for + """ + using = router.db_for_write(obj._meta.model) + collector = Collector(using=using) + collector.collect([obj]) + related_objects = {} + for model, instance in collector.instances_with_model(): + if instance == obj: + continue + if model.__name__ not in related_objects: + related_objects[model.__name__] = { + "name": model._meta.verbose_name, + "items": [] + } + related_objects[model.__name__]['items'].append(instance) + if len(related_objects[model.__name__]['items']) > 1: + related_objects[model.__name__]['name'] = model._meta.verbose_name_plural + return related_objects + # # Request handlers # @@ -335,15 +359,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView): obj = self.get_object(**kwargs) form = ConfirmationForm(initial=request.GET) - using = router.db_for_write(obj._meta.model) - collector = Collector(using=using) - collector.collect([obj]) - related_objects = {} - for model, instance in collector.instances_with_model(): - # we could ignore the instance == obj so that the list doesnt contain itself... - if model.__name__ not in related_objects: - related_objects[model.__name__] = [] - related_objects[model.__name__].append(instance) + related_objects = self._get_dependent_objects(obj) # If this is an HTMX request, return only the rendered deletion form as modal content if is_htmx(request): diff --git a/netbox/templates/htmx/delete_form.html b/netbox/templates/htmx/delete_form.html index 370f48851..71e70ba6e 100644 --- a/netbox/templates/htmx/delete_form.html +++ b/netbox/templates/htmx/delete_form.html @@ -14,14 +14,26 @@
{% if related_objects %}
- This will cause deletion of the following items:
- {% for model,objects in related_objects.items %}
- - {{ model }}:
- {% for object in objects %}
- {{ object | linkify }}{% if not forloop.last %}, {% endif %}
- {% endfor %}
-
+ This will cause deletion of the following objects:
+