summaryrefslogtreecommitdiff
path: root/django/views/generic/edit.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/views/generic/edit.py')
-rw-r--r--django/views/generic/edit.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/django/views/generic/edit.py b/django/views/generic/edit.py
index ccfef9cbcd..d0de788c46 100644
--- a/django/views/generic/edit.py
+++ b/django/views/generic/edit.py
@@ -1,5 +1,5 @@
from django.core.exceptions import ImproperlyConfigured
-from django.forms import models as model_forms
+from django.forms import Form, models as model_forms
from django.http import HttpResponseRedirect
from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
from django.views.generic.detail import (
@@ -225,12 +225,30 @@ class DeletionMixin:
"No URL to redirect to. Provide a success_url.")
-class BaseDeleteView(DeletionMixin, BaseDetailView):
+class BaseDeleteView(DeletionMixin, FormMixin, BaseDetailView):
"""
Base view for deleting an object.
Using this base class requires subclassing to provide a response mixin.
"""
+ form_class = Form
+
+ def post(self, request, *args, **kwargs):
+ # Set self.object before the usual form processing flow.
+ # Inlined because having DeletionMixin as the first base, for
+ # get_success_url(), makes leveraging super() with ProcessFormView
+ # overly complex.
+ self.object = self.get_object()
+ form = self.get_form()
+ if form.is_valid():
+ return self.form_valid(form)
+ else:
+ return self.form_invalid(form)
+
+ def form_valid(self, form):
+ success_url = self.get_success_url()
+ self.object.delete()
+ return HttpResponseRedirect(success_url)
class DeleteView(SingleObjectTemplateResponseMixin, BaseDeleteView):