Django DeleteView без шаблона подтверждения
Я использую Django DeleteView в шаблоне, и я создал url & view. Можно ли пропустить процесс загрузки шаблона _confirm_delete и сразу же отправить сообщение об удалении.
Ответы
Ответ 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')