show objects that would be deleted by cascade

This commit is contained in:
Jamie Murphy 2023-09-08 00:01:53 +01:00
parent a8a36c0a8f
commit b81d462976
No known key found for this signature in database
GPG Key ID: 10EDAE1E6D858F5F
2 changed files with 20 additions and 1 deletions

View File

@ -2,7 +2,8 @@ import logging
from copy import deepcopy
from django.contrib import messages
from django.db import transaction
from django.contrib.admin.utils import NestedObjects
from django.db import transaction, router
from django.db.models import ProtectedError
from django.shortcuts import redirect, render
from django.urls import reverse
@ -334,6 +335,14 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
obj = self.get_object(**kwargs)
form = ConfirmationForm(initial=request.GET)
using = router.db_for_write(obj._meta.model)
collector = NestedObjects(using=using)
collector.collect([obj])
if collector.nested():
nested_objs = collector.nested()[1]
else:
nested_objs = []
# If this is an HTMX request, return only the rendered deletion form as modal content
if is_htmx(request):
viewname = get_viewname(self.queryset.model, action='delete')
@ -343,6 +352,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
'object_type': self.queryset.model._meta.verbose_name,
'form': form,
'form_url': form_url,
'nested_objs': nested_objs,
**self.get_extra_context(request, obj),
})
@ -350,6 +360,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
'object': obj,
'form': form,
'return_url': self.get_return_url(request, obj),
'nested_objs': nested_objs,
**self.get_extra_context(request, obj),
})

View File

@ -12,6 +12,14 @@
Are you sure you want to <strong class="text-danger">delete</strong> {{ object_type }} <strong>{{ object }}</strong>?
{% endblocktrans %}
</p>
{% if nested_objs %}
<p>
This will cause deltion of the following related items: <br>
{% for nested_obj in nested_objs %}
{{ nested_obj }} <br>
{% endfor %}
</p>
{% endif %}
{% render_form form %}
</div>
<div class="modal-footer">