【问题标题】:Django Delete CBV with confirmation pop-up and multiple success url带有确认弹出窗口和多个成功 url 的 Django 删除 CBV
【发布时间】:2018-07-29 13:19:45
【问题描述】:

在我的情况下,可以从以下位置删除实例模型:

  • 一个 ListView 继承的 View
  • 一个DetailView继承了View

默认情况下,当调用删除视图时:

  • get 函数调用“confirm_delete”模板。相反,我希望出现一个弹出窗口/模态,如果在模态中单击delete 将删除该对象
  • 如果delete操作在ListView上,删除后用户将留在ListView上,ListView内容会更新

  • 如果delete操作在DetailView上,删除后用户将被重定向到ListView或其他页面(取决于其他规则)

--

所以我想知道如何在删除时执行 Ajax 调用,如何根据我在操作之前的位置在删除中设置条件成功 url。

【问题讨论】:

  • 您应该使用DeleteView 删除对象。使用 GET 请求调用 ListViewDetailView。修改数据时,您应该始终要求 POST 请求。

标签: ajax django django-forms django-templates django-views


【解决方案1】:

对于DetailView,您可以简单地使用如下形式:

<form action="{% url "app:delete" object.id %}" method="post">
  {% csrf_token %}

  <button onclick="return confirm('Are you sure?');">Delete</button>
</form>

单击该按钮将打开一个确认对话框。如果用户点击OK,表单将被提交。这将删除对象并重定向到 confirm_delete 页面的重定向方式。

对于ListView,可以简单地向DeleteView 发送POST 请求,并在成功时重新加载当前页面以更新ListView。您如何发送 AJAX 请求取决于您是否使用任何库,但使用 jQuery 可以如下完成:

$.ajax('{% url "app:delete" object.id %}', {
    method: 'POST',
    success: function() {
        window.location.reload();
    },
});

注意:不要忘记包含 csrf_token 以使 AJAX 请求正常工作。请参阅docs 了解更多信息。

【讨论】:

  • 第一个解决方案不起作用的任何原因?我在chrome中试过,我得到了警告框,但是当我确认时,它没有继续,它只是关闭了警告框。
  • 没关系,我的按钮类型是“按钮”,应该是“提交”。它工作得很好,我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多