Подтвердить что ты не робот

Django DeleteView без шаблона подтверждения

Я использую Django DeleteView в шаблоне, и я создал url & view. Можно ли пропустить процесс загрузки шаблона _confirm_delete и сразу же отправить сообщение об удалении.

4b9b3361

Ответ 1

DeleteView отвечает на запросы POST и GET, шаблон подтверждения подтверждения запроса GET, в то время как POST удаляет экземпляр.

Вы можете отправить запрос POST без подтверждения в форме:

<form method="POST" action="{% url "your_delete_url_name" %}">
   {% csrf_token %}<input type="submit" value="DELETE">
</form>

Если вы не хотите иметь ссылку вместо кнопки формы, используйте javascript для создания невидимой формы, которая будет отправлена по ссылке.

Не рекомендуется использовать GET запрос на обновление или удаление, но если вы действительно настаиваю, чтобы вы можете сократить get метод с вашей точки зрения класса, чтобы получить возможность post, а именно:

def get(self, *args, **kwargs):
    return self.post(*args, **kwargs)

Ответ 2

Или вы можете переопределить метод get() в DeleteView:

class YourDeleteView(DeleteView):

    model = YourModel
    success_url = '<success_url>'

    def get(self, request, *args, **kwargs):
        return self.post(request, *args, **kwargs)

Но будьте осторожны, убедитесь, что это не влияет на другие функции.

Ответ 3

Да, просто измените следующий параметр. В ответном ответе убедитесь, что словарь, который вы передаете, имеет что-то вроде этого: { 'next': '/<your_path_here>}/' }, убедитесь, что вы зафиксировали изменения перед добавлением next параметра. Возможно, вы захотите изменить свои функции get и post.

Ответ 4

Все, что вам нужно сделать, это переопределить метод get_success_url вашего вида просмотра. Затем он будет напрямую удалять объект из БД. Например:

class YourView(DeleteView):
    model = YourModel

    def get_success_url(self):
        return reverse('your_redirect_view')