def delete_form_view(
request: WSGIRequest,
*,
context_data: dict | None = None,
obj,
activity_func: callable | None = None,
auto_add_activity: bool = True,
breadcrumbs_func: BreadCrumbCallable | None = None,
delete_func: callable | None = None,
# Present and past tense of verb
verbs: tuple[str, str] = ('delete', 'deleted'),
return_url: str,
template: str = 'django_spire/page/delete_confirmation_form_page.html'
) -> HttpResponseRedirect | TemplateResponse:
if context_data is None:
context_data = {}
model_name = obj._meta.model._meta.verbose_name
if request.method == 'POST':
form = DeleteConfirmationForm(data=request.POST, obj=obj)
if form.is_valid():
if form.cleaned_data['should_delete']:
if delete_func is not None:
delete_func()
else:
obj.set_deleted()
if activity_func is not None:
activity_func()
elif hasattr(obj, 'add_activity') and auto_add_activity:
obj.add_activity(
user=request.user,
verb=verbs[1],
information=f'{request.user.get_full_name()} {verbs[1].lower()} {model_name} "{obj}".'
)
return HttpResponseRedirect(return_url)
else:
form = DeleteConfirmationForm(obj=obj)
breadcrumbs = Breadcrumbs()
if breadcrumbs_func is None:
breadcrumbs.add_obj_breadcrumbs(obj)
breadcrumbs.add_breadcrumb(name=verbs[0].title())
else:
breadcrumbs_func(breadcrumbs)
base_context_data = {
'page_title': obj.__str__(),
'page_description': verbs[0].title(),
'breadcrumbs': breadcrumbs,
'form': form,
'form_title': f'{verbs[0].title()} {obj}',
'form_description': f'Are you sure you would like to {verbs[0].lower()} {model_name} "{obj}"?',
}
context_data = {**base_context_data, **context_data}
return TemplateResponse(
request,
template=template,
context=context_data
)