在同一post_detail页面中实现对帖子的评论进行编辑/删除

时间:2019-05-07 19:34:15

标签: django python-3.x django-models django-class-based-views

我正在使用django基于类的视图,并且已经成功实现了一个表单,用于在与PostView的DetailView相同的页面上发布评论。我正在尝试为评论实现更新/删除功能,但是我在使用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可以完成这项工作。但出现以下错误

/ p / 27 / comment / 9 / delete中的

AttributeError 通用详细信息视图CommentDeleteView必须使用URLconf中的对象pk或slug调用。

如错误所指示,模板中的“ comment.id”能够找到特定的注释,这使我充满希望,但我不知道如何解决该错误。如何与DeleteView串联使用两个pk进行评论?谢谢您的时间和帮助。

1 个答案:

答案 0 :(得分:-1)

我认为使用2条路径是行不通的。尝试使用和函数而不是类。

因为Django的类功能受到限制。还有Django包注释系统。

我想不出代码,但是您尝试过

请在detailview类下编写: object.manager()

然后在视图中输入: 评论= objects.all()

u.form = Post(实例=用户,comment =评论)