Как использовать базовый просмотр удаления

Я начинаю использовать 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.

Вернуться на верх