DeleteView is a CBV for deleting an object with a confirmation step.
Basic example
from django.views.generic import DeleteView
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Task
class TaskDeleteView(LoginRequiredMixin, DeleteView):
model = Task
success_url = reverse_lazy('task-list')
template_name = 'tasks/task_confirm_delete.html'
URL
path('tasks/<int:pk>/delete/', views.TaskDeleteView.as_view(), name='task-delete'),
Confirmation template
<h2>Delete task?</h2>
<p>Are you sure you want to delete "{{ object.title }}"?</p>
<form method="post">
{% csrf_token %}
<a href="{% url 'task-list' %}">Cancel</a>
<button type="submit">Delete</button>
</form>
Permission check
class TaskDeleteView(LoginRequiredMixin, DeleteView):
model = Task
success_url = reverse_lazy('task-list')
def get_queryset(self):
# Users can only delete their own tasks
return Task.objects.filter(owner=self.request.user)
Without a template (POST only)
class TaskDeleteView(LoginRequiredMixin, DeleteView):
model = Task
success_url = reverse_lazy('task-list')
# Django looks for task_confirm_delete.html by default
Redirect after deletion
def get_success_url(self):
return reverse('project-detail', kwargs={'pk': self.object.project.pk})
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!