【问题标题】:Button in html that deletes an instance of a Django modelhtml 中用于删除 Django 模型实例的按钮
【发布时间】:2016-03-18 00:26:06
【问题描述】:

如果我有一个实例列表,并且每个实例都有一个按钮或复选框。 当您按下它时,它会在实例上调用 delete()。你将如何在 Django 中实现这一点?

【问题讨论】:

    标签: html django django-models


    【解决方案1】:

    您需要创建一个函数视图来查询您要删除的确切实例。我的应用中有一个示例,该示例将查询所选帖子的评论并在用户按下删除按钮时将其删除。

    def delete_comment(request, comment_id):
        comment = get_object_or_404(Comment, id=comment_id)
        slug = slugify(comment.post.slug)
        if request.user.is_staff or comment.user == request.user:
            Comment.objects.get(id=comment_id).delete()
            messages.success(request, "Your comment was successfully deleted.")
        return HttpResponseRedirect(reverse("main.views.post", args=(slug,)))
    

    所以让我解释一下这个函数视图是如何工作的。我有一个名为Comment 的模型,并且该Comment 模型具有Post 模型的外键。所以每个帖子都有一些cmets。一位用户现在评论了一个帖子,他决定删除它。有一个删除按钮将他重定向到delete_comment 函数视图。视图试图获取comment id,如果存在则继续,如果不存在则返回 404。然后它检查评论是否由尝试删除它的同一用户发表,或者该用户是否一名工作人员。然后我们得到comment id,并使其与我们的函数参数comment_id相同,这样我们就可以在urls.py中使用它,正如你所看到的,我们得到了确切的评论ID,我们使用delete()函数来它,然后删除评论!

    当然,对于 delete_comment 视图,您需要一个如下所示的 url

    url(r"^delete_comment/(?P<comment_id>\d+)/$", views.delete_comment, name="delete_comment"),
    

    下面是您如何编写删除按钮以将其与视图和 url 挂钩

    <a href="{% url "main.views.delete_comment" comment.id %}">delete</a>
    

    如您所见,url 包含删除函数视图的位置,并且它使用 cmets.id 的参数在视图和 url 中使用。很容易实现,希望这个例子能给你一个起点/想法。

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 2019-02-25
      • 2016-09-03
      • 2015-09-27
      相关资源
      最近更新 更多