Как использовать базовый просмотр удаления
Я начинаю использовать DeleteView из django.views.generic.
Однако я все еще в замешательстве относительно DeleteView
Документ говорит, что вам не нужно делать ничего в DeleteView, кроме UpdateView, CreateView
So,,,, это правильно???
Не удаляет элемент.
в urls.py
path('preaction/<int:pk>/delete', PreActionDeleteView.as_view(),
name="pre-action-delete"),
в views.py
class PreActionDeleteView(LoginRequiredMixin, DeleteView):
model = PreAction
success_url = reverse_lazy("pre-action-list")
def delete(self, request, *args, **kwargs):
success_url = self.get_success_url()
messages_text = "deleted"
messages.success(self.request, messages_text)
return HttpResponseRedirect(success_url)
Документ говорит, что вам не нужно делать ничего в DeleteView, кроме
Поскольку вы переопределяете метод delete(), вы должны удалить указанный объект вручную, что в вашем случае сводится к вызову self.object.delete():
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
self.object.delete()
messages_text = "deleted"
messages.success(self.request, messages_text)
return HttpResponseRedirect(success_url)
Чтобы получить больше информации о том, как все обрабатывается, посмотрите эту хорошо структурированную диаграмму потоков.
Не переопределяйте метод delete(). Гораздо понятнее делать такие вещи в form_valid():
from django.contrib.messages.views import SuccessMessageMixin
class BookDeleteView(SuccessMessageMixin, DeleteView):
model = PreAction
success_url = reverse_lazy("pre-action-list")
def form_valid(self, form):
data_to_return = super().form_valid(form)
messages_text = "deleted"
messages.success(self.request, messages_text)
return data_to_return
На всякий случай, обычно требуется вернуть super() метода, который обычно находится в View.
Также вам не нужно использовать return HttpResponseRedirect(success_url), потому что это стандартное поведение DeleteView - перенаправлять на success_url.