diff --git a/iommi/admin.py b/iommi/admin.py index 3acbbcdc..a1f1b951 100644 --- a/iommi/admin.py +++ b/iommi/admin.py @@ -481,8 +481,10 @@ def on_save(request, form, instance, **_): ) messages.add_message(request, messages.INFO, message, fail_silently=True) - def on_delete(request, form, instance, **_): - message = f'{form.model._meta.verbose_name.capitalize()} {instance} was deleted' + def delete(request, form, instance, **_): + str_instance = str(instance) + instance.delete() + message = f'{form.model._meta.verbose_name.capitalize()} {str_instance} was deleted' messages.add_message(request, messages.INFO, message, fail_silently=True) form = setdefaults_path( @@ -491,7 +493,7 @@ def on_delete(request, form, instance, **_): call_target__cls=cls.get_meta().form_class, call_target__attribute=operation, extra__on_save=on_save, - extra__on_delete=on_delete, + extra__delete=delete, actions__submit__include=lambda request, form, **_: cls.has_permission( request, instance=None, model=form.model, operation=operation ), diff --git a/iommi/form.py b/iommi/form.py index e133687b..6581fd6b 100644 --- a/iommi/form.py +++ b/iommi/form.py @@ -1551,10 +1551,10 @@ def create_or_edit_object_redirect(is_create, redirect_to, redirect, form): def delete_object__post_handler(form, **_): instance = form.instance - form.invoke_callback(form.extra.on_delete) + form.invoke_callback(form.extra.pre_delete) if instance.pk is not None: # Check if already deleted by the callback try: - instance.delete() + form.invoke_callback(form.extra.delete, model_object=instance) except IntegrityError as e: objects = getattr(e, 'restricted_objects', None) if objects is None: @@ -1596,6 +1596,8 @@ def delete_object__post_handler(form, **_): ) return None + form.invoke_callback(form.extra.on_delete) + return create_or_edit_object_redirect( is_create=False, redirect_to=form.extra.redirect_to, @@ -2147,6 +2149,8 @@ def get_errors(self): extra__on_save_all_but_related_fields=lambda **kwargs: None, # pragma: no mutate extra__pre_save=lambda **kwargs: None, # pragma: no mutate extra__on_save=lambda **kwargs: None, # pragma: no mutate + extra__pre_delete=lambda **kwargs: None, # pragma: no mutate + extra__delete=lambda model_object, **_: model_object.delete(), extra__on_delete=lambda **kwargs: None, # pragma: no mutate extra__redirect=lambda redirect_to, **_: HttpResponseRedirect(redirect_to), extra__redirect_to=None,