From 593fa468a5a1b7abe9cef4f17575d68b91612add Mon Sep 17 00:00:00 2001
From: Jeremy Stretch
Date: Wed, 1 Nov 2023 11:29:09 -0400
Subject: [PATCH] Misc cleanup
---
netbox/netbox/views/generic/object_views.py | 27 +++++------
netbox/templates/htmx/delete_form.html | 50 ++++++++++++---------
2 files changed, 42 insertions(+), 35 deletions(-)
diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py
index c5b0df802..ab176a678 100644
--- a/netbox/netbox/views/generic/object_views.py
+++ b/netbox/netbox/views/generic/object_views.py
@@ -324,7 +324,8 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
def _get_dependent_objects(self, obj):
"""
- Returns a dict of dependent objects, model names as primary key, inside each two keys exist title and objects (list)
+ Returns a dictionary mapping of dependent objects (organized by model) which will be deleted as a result of
+ deleting the requested object.
Args:
obj: The object to return dependent objects for
@@ -332,18 +333,15 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
using = router.db_for_write(obj._meta.model)
collector = Collector(using=using)
collector.collect([obj])
- related_objects = defaultdict(dict)
+
+ # Compile a mapping of models to instances
+ dependent_objects = defaultdict(list)
for model, instance in collector.instances_with_model():
- if instance == obj:
- continue
+ # Omit the root object
+ if instance != obj:
+ dependent_objects[model].append(instance)
- related_objects.setdefault(model.__name__, {"objects": []})['objects'].append(instance)
-
- if len(related_objects[model.__name__]['objects']) == 1:
- related_objects[model.__name__]['title'] = title(model._meta.verbose_name)
- else:
- related_objects[model.__name__]['title'] = title(model._meta.verbose_name_plural)
- return dict(related_objects)
+ return dict(dependent_objects)
#
# Request handlers
@@ -358,8 +356,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
"""
obj = self.get_object(**kwargs)
form = ConfirmationForm(initial=request.GET)
-
- related_objects = self._get_dependent_objects(obj)
+ dependent_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):
@@ -370,7 +367,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
'object_type': self.queryset.model._meta.verbose_name,
'form': form,
'form_url': form_url,
- 'related_objects': related_objects,
+ 'dependent_objects': dependent_objects,
**self.get_extra_context(request, obj),
})
@@ -378,7 +375,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
'object': obj,
'form': form,
'return_url': self.get_return_url(request, obj),
- 'related_objects': related_objects,
+ 'dependent_objects': dependent_objects,
**self.get_extra_context(request, obj),
})
diff --git a/netbox/templates/htmx/delete_form.html b/netbox/templates/htmx/delete_form.html
index 14288512b..4d13072dd 100644
--- a/netbox/templates/htmx/delete_form.html
+++ b/netbox/templates/htmx/delete_form.html
@@ -12,29 +12,39 @@
Are you sure you want to delete {{ object_type }} {{ object }}?
{% endblocktrans %}
- {% if related_objects %}
-
- This will cause deletion of the following objects:
+ {% if dependent_objects %}
+
+ {% trans "The following objects will be deleted as a result of this action." %}
+
-
- {% for model,object_dict in related_objects.items %}
-
-
-
-
- {% for object in object_dict.objects %}
- - {{ object | linkify }}{% if not forloop.last %}
{% endif %}
- {% endfor %}
+ {% for model, instances in dependent_objects.items %}
+
+
+
+
+
+ {% for instance in instances %}
+ {% with url=instance.get_absolute_url %}
+
{{ instance }}
+ {% endwith %}
+ {% endfor %}
+
+
-
- {% endfor %}
-
-
+ {% endfor %}
+
{% endif %}
{% render_form form %}