代码之家  ›  专栏  ›  技术社区  ›  user3541631

Django使用确认弹出窗口和多个成功url删除CBV

  •  2
  • user3541631  · 技术社区  · 7 年前

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

    • ListView继承的视图
    • DetailView继承的视图

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

    • 这个 get 函数调用“confirm\u delete”模板。相反,我希望出现一个弹出/模式,如果 delete 在模式中单击将删除对象
    • 如果 删去 操作在ListView上,删除后,用户将保留在ListView上,并更新ListView内容

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

    --

    所以我想知道如何在delete上进行Ajax调用,如何在delete中具有条件成功的url,这取决于我在操作之前的位置。

    1 回复  |  直到 7 年前
        1
  •  9
  •   ikkuh    7 年前

    对于 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 只需发送 POST 向的请求 DeleteView 并在成功后重新加载当前页面以更新 列表视图 . 发送AJAX请求的方式取决于是否使用任何库,但使用jQuery可以按以下方式完成:

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

    注意:不要忘记包括 csrf_token 让AJAX请求正常工作。请参见 docs 了解更多信息。