+
{% blocktrans %}Are you sure you want to delete the {{ title }}: {{ object }} {% endblocktrans %}
{{ form|crispy }}
-
-
{% trans 'Cancel' %}
+
+ {% if related_objects %}
+ {% blocktrans %}
{{ object }} could not be deleted because it is still referenced by the following instances: {% endblocktrans %}
+
+
+ {% for o in related_objects %}
+ {% class_name o.model as name %}
+
{{ name }}
+
+ {% for e in o %}
+ -
+ #{{ e.id }} {{ e }}
+
+ {% endfor %}
+
+
+ {% endfor %}
+
+
+
+ {% endif %}
+
+
+
{% trans 'Cancel' %}
+
-
+
{% endblock %}
\ No newline at end of file
diff --git a/cookbook/templatetags/custom_tags.py b/cookbook/templatetags/custom_tags.py
index 012074db..e22411c6 100644
--- a/cookbook/templatetags/custom_tags.py
+++ b/cookbook/templatetags/custom_tags.py
@@ -26,6 +26,11 @@ def get_class(value):
return value.__class__
+@register.simple_tag
+def class_name(value):
+ return value.__class__.__name__
+
+
@register.simple_tag
def delete_url(model, pk):
try:
diff --git a/cookbook/views/delete.py b/cookbook/views/delete.py
index bcd57cea..466c8733 100644
--- a/cookbook/views/delete.py
+++ b/cookbook/views/delete.py
@@ -1,7 +1,7 @@
from django.contrib import messages
from django.db.models import ProtectedError
from django.http import HttpResponseRedirect
-from django.shortcuts import get_object_or_404
+from django.shortcuts import get_object_or_404, render
from django.urls import reverse, reverse_lazy
from django.utils.translation import gettext as _
from django.views.generic import DeleteView
@@ -23,9 +23,31 @@ class RecipeDelete(GroupRequiredMixin, DeleteView):
model = Recipe
success_url = reverse_lazy('index')
+ def delete(self, request, *args, **kwargs):
+ obj = self.get_object()
+
+ related_objects = []
+ for x in obj._meta.get_fields():
+ try:
+ related = x.related_model.objects.filter(**{x.field.name: obj})
+ if related.exists():
+ related_objects.append(related)
+ except AttributeError:
+ pass
+
+ if related_objects:
+ self.object = obj
+ return render(request, template_name=self.template_name, context=self.get_context_data(related_objects=related_objects))
+
+ success_url = self.get_success_url()
+ obj.delete()
+ return HttpResponseRedirect(success_url)
+
def get_context_data(self, **kwargs):
context = super(RecipeDelete, self).get_context_data(**kwargs)
context['title'] = _("Recipe")
+ if 'related_objects' in kwargs:
+ context['related_objects'] = kwargs.pop('related_objects')
return context