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 %}