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:
+

+ + {% for model,object_dict in related_objects.items %} +
+

+ +

+
+
+ {% for object in object_dict.items %} + - {{ object | linkify }}{% if not forloop.last %}
{% endif %} + {% endfor %} +
+
+
{% endfor %} +

{% endif %} {% render_form form %}