migrate to defaultdict, use title for capitalisation of accordian titles

This commit is contained in:
Jamie Murphy 2023-10-31 21:54:40 +00:00
parent 6be745f13c
commit ee5be84911
2 changed files with 14 additions and 14 deletions

View File

@ -1,5 +1,6 @@
import logging import logging
from copy import deepcopy from copy import deepcopy
from collections import defaultdict
from django.contrib import messages from django.contrib import messages
from django.db import transaction, router from django.db import transaction, router
@ -16,7 +17,7 @@ from utilities.exceptions import AbortRequest, PermissionsViolation
from utilities.forms import ConfirmationForm, restrict_form_fields from utilities.forms import ConfirmationForm, restrict_form_fields
from utilities.htmx import is_htmx from utilities.htmx import is_htmx
from utilities.permissions import get_permission_for_model from utilities.permissions import get_permission_for_model
from utilities.utils import get_viewname, normalize_querydict, prepare_cloned_fields from utilities.utils import get_viewname, normalize_querydict, prepare_cloned_fields, title
from utilities.views import GetReturnURLMixin from utilities.views import GetReturnURLMixin
from .base import BaseObjectView from .base import BaseObjectView
from .mixins import ActionsMixin, TableMixin from .mixins import ActionsMixin, TableMixin
@ -323,7 +324,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
def _get_dependent_objects(self, obj): 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) Returns a dict of dependent objects, model names as primary key, inside each two keys exist title and objects (list)
Args: Args:
obj: The object to return dependent objects for obj: The object to return dependent objects for
@ -331,19 +332,18 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
using = router.db_for_write(obj._meta.model) using = router.db_for_write(obj._meta.model)
collector = Collector(using=using) collector = Collector(using=using)
collector.collect([obj]) collector.collect([obj])
related_objects = {} related_objects = defaultdict(dict)
for model, instance in collector.instances_with_model(): for model, instance in collector.instances_with_model():
if instance == obj: if instance == obj:
continue continue
if model.__name__ not in related_objects:
related_objects[model.__name__] = { related_objects.setdefault(model.__name__, {"objects": []})['objects'].append(instance)
"name": model._meta.verbose_name,
"items": [] if len(related_objects[model.__name__]['objects']) == 1:
} related_objects[model.__name__]['title'] = title(model._meta.verbose_name)
related_objects[model.__name__]['items'].append(instance) else:
if len(related_objects[model.__name__]['items']) > 1: related_objects[model.__name__]['title'] = title(model._meta.verbose_name_plural)
related_objects[model.__name__]['name'] = model._meta.verbose_name_plural return dict(related_objects)
return related_objects
# #
# Request handlers # Request handlers

View File

@ -21,12 +21,12 @@
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header" id="deleteheading{{ forloop.counter }}"> <h2 class="accordion-header" id="deleteheading{{ forloop.counter }}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ forloop.counter }}" aria-expanded="false" aria-controls="collapse{{ forloop.counter }}"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ forloop.counter }}" aria-expanded="false" aria-controls="collapse{{ forloop.counter }}">
{{ object_dict.items |length }} {{ object_dict.name }} {{ object_dict.objects |length }} {{ object_dict.title }}
</button> </button>
</h2> </h2>
<div id="collapse{{ forloop.counter }}" class="accordion-collapse collapse" aria-labelledby="deleteheading{{ forloop.counter }}" data-bs-parent="#deleteAccordion"> <div id="collapse{{ forloop.counter }}" class="accordion-collapse collapse" aria-labelledby="deleteheading{{ forloop.counter }}" data-bs-parent="#deleteAccordion">
<div class="accordion-body"> <div class="accordion-body">
{% for object in object_dict.items %} {% for object in object_dict.objects %}
- {{ object | linkify }}{% if not forloop.last %}<br> {% endif %} - {{ object | linkify }}{% if not forloop.last %}<br> {% endif %}
{% endfor %} {% endfor %}
</div> </div>