【发布时间】:2019-09-25 12:22:39
【问题描述】:
我正在使用 django 的基于类的视图,并且已经成功实现了一个表单,用于在与我的 Post 模型的 DetailView 相同的页面上发布评论。我正在尝试为 cmets 实现更新/删除功能,但我无法使用 pk 定位特定评论。
我可以采取什么方法来找到特定评论并编辑/删除它?
我希望编辑按钮指向一个页面,其中的表单填写了当前评论数据,删除按钮指向一个comment_confirm_delete.html 模板。在同一页面上使用表单编辑评论会很棒,但我试图让它首先在单独的页面上工作。
我找到了很多关于如何使用基于函数的视图的资源,但我想使用基于类的视图。
这是删除评论的urlpattern(我还没有更新)
path('post/<int:pk_post>/comment/<int:pk_comment>/delete',CommentDeleteView.as_view(), name='comment-delete')
这是在我的views.py中继承DeleteView的类
class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Post
success_url = '/'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
comment = Comment.objects.get(id=self.kwargs.get('pk_comment', ''))
context['comment'] = comment
return context
def test_func(self):
Comment = self.get_object()
return self.request.user == comment.author
这是 post_detail.html 中的部分,如果用户是评论的作者,用户可以更新/删除评论。
{% if comment.author == user %}
<a class="text-info small mr-1" href="#">Edit</a>
<a class="text-danger small" href="{% url 'comment-delete' object.id comment.id %}">Delete</a>
{% endif %}
我希望通过使用两个 pk(pk_post、pk_comment),我可以在帖子中找到评论,并且 CommentDeleteView 继承自的 DeleteView 可以完成这项工作。但我收到以下错误
/post/27/comment/9/delete 处的 AttributeError 通用详细视图 CommentDeleteView 必须在 URLconf 中使用对象 pk 或 slug 调用。
正如错误所示,模板中的“comment.id”能够找到特定的评论,这让我充满希望,但我不知道如何解决这个错误。如何将两个 pk 与 DeleteView 串联使用以进行评论?感谢您的时间和帮助。
【问题讨论】:
标签: django python-3.x django-models django-class-based-views