【问题标题】:How to use a Bootstrap Modal to delete a object using Class Based Views in Django?如何使用引导模式在 Django 中使用基于类的视图删除对象?
【发布时间】:2019-08-22 22:43:04
【问题描述】:

我在 Django 中使用 CBV 来删除项目。我想要做的是当我单击要删除的按钮时,而不是将我重定向到 post_confirm_delete 视图,我想弹出一个模式,在该模式中我显示用户是否要删除对象的问题和一个用于确认的按钮和其他删除对象。我在 HTML 中试过这个:

<button class="btn" data-toggle="modal" data-target="#fm-modal-grid">Delete</button>
<div class="modal fade" id="fm-modal-grid" tabindex="-1"
     role="dialog" aria-labelledBy="fm-modal-grid"
    aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <button class="close" data-dismiss="modal" aria-label="Cerrar">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <div class="container-fluid">
                    <div class="row">
                        <div class="col-12 col-sm-6">
                            <p>Are you sure you want to delte {{post.title}}</p>
                        </div>
                    </div>
                </div>
            </div>

            <div class="modal-footer">
                <a href="{% url 'blog:post_remove' pk=post.pk %}" class="btn">Delete</a>
                <button class="btn btn-primary" data-dismiss="modal">Cancelar</button>

            </div>
        </div>
    </div>
</div>

我在视图类的 delte CBV 中有这个:

class PostDeleteView(DeleteView, LoginRequiredMixin):
    model = Post
    success_url = reverse_lazy('post_list')
    template_name = 'blog/post_list.html'

url 文件如下所示:

urlpatterns = [
    path('',views.PostListView.as_view(),name='post_list'),
    path('article/', views.ArticleView.as_view(), name="article"),
    path('newpost/', views.CreatPostView.as_view(), name="new_post"),
    path('post/<int:pk>', views.PostDetailView.as_view(), name='post_detail'),
    path('post/<int:pk>/edit/', views.PostUpdateView.as_view(), name='post_edit'),
    path('post/<int:pk>/remove/', views.PostDeleteView.as_view(), name='post_remove'),
]

当我按下模态框内的删除按钮时,它会将我重定向到我的索引,但不会删除对象。我该怎么做?

【问题讨论】:

  • 尝试将post_detail 放在urlpatterns 列表的底部。
  • @BearBrown 它没有用 :( 它仍然将我发送到 post_list 而不删除对象
  • 我编辑了您的答案,并为其他将搜索相同问题的人提供了详细信息,请不要忘记接受您的答案。

标签: python django bootstrap-4 bootstrap-modal django-class-based-views


【解决方案1】:

docs

只有当请求方法是 POST 时,给定的对象才会被删除。

所以链接是它不起作用的原因。我通过将用于删除的模式按钮放在这样的表单中来解决它:

<form action="{% url 'blog:post_remove' pk=post.pk %}" method="POST">
       {% csrf_token %}
       <button class="btn">Delete</button>
</form>

【讨论】:

    【解决方案2】:

    确实,您需要将按钮放入表单中以进行 POST。

    另一种解决方案是使用一些 JS 触发模态,然后当您确认删除时,您可以进行 POST 类型的 Ajax 调用。因此,您没有义务将按钮放在表单中。

    $.confirm({
            title: 'Deletion pop-up',
            content: 'Do you want to proceed ?',
            buttons: {
                confirm: function () {
                  $.ajax({...}),
                    success: function(response){...},
                }
            }
    )};
    

    【讨论】:

    • 这是使用 jQuery 吗?
    • 好的,我会记住这个方法,非常感谢:)
    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2018-09-13
    相关资源
    最近更新 更多