DeleteView — CBV для удаления объекта с подтверждением.
Базовый пример
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'),
Шаблон подтверждения
<h2>Удалить задачу?</h2>
<p>Вы уверены, что хотите удалить "{{ object.title }}"?</p>
<form method="post">
{% csrf_token %}
<a href="{% url 'task-list' %}">Отмена</a>
<button type="submit">Удалить</button>
</form>
Проверка прав
class TaskDeleteView(LoginRequiredMixin, DeleteView):
model = Task
success_url = reverse_lazy('task-list')
def get_queryset(self):
# Пользователь может удалять только свои задачи
return Task.objects.filter(owner=self.request.user)
Без шаблона (только POST)
class TaskDeleteView(LoginRequiredMixin, DeleteView):
model = Task
success_url = reverse_lazy('task-list')
# Django ищет шаблон task_confirm_delete.html по умолчанию
Redirect после удаления
def get_success_url(self):
return reverse('project-detail', kwargs={'pk': self.object.project.pk})
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!