【问题标题】:Implementing editing/deleting a comment on a post in the same post_detail page在同一 post_detail 页面中实现对帖子的编辑/删除评论
【发布时间】: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


    【解决方案1】:

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

    因为 Django 的类功能是有限的。还有 Django 包评论系统。

    我想不出代码,但你试过了吗

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 2022-11-10
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      相关资源
      最近更新 更多