【发布时间】:2016-03-18 00:26:06
【问题描述】:
如果我有一个实例列表,并且每个实例都有一个按钮或复选框。 当您按下它时,它会在实例上调用 delete()。你将如何在 Django 中实现这一点?
【问题讨论】:
标签: html django django-models
如果我有一个实例列表,并且每个实例都有一个按钮或复选框。 当您按下它时,它会在实例上调用 delete()。你将如何在 Django 中实现这一点?
【问题讨论】:
标签: html django django-models
您需要创建一个函数视图来查询您要删除的确切实例。我的应用中有一个示例,该示例将查询所选帖子的评论并在用户按下删除按钮时将其删除。
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 中使用。很容易实现,希望这个例子能给你一个起点/想法。
【讨论】: