【问题标题】:Django blog commentsDjango 博客评论
【发布时间】:2021-04-16 01:50:33
【问题描述】:

我无法在帖子的现有评论列表中添加新评论。这是模型:

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    body = models.TextField()
    commented_by = models.ForeignKey(User, on_delete=models.CASCADE)
    commented_on = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'Commented by {self.commented_by} on {self.post}.'

这是视图:

def post_detail(request, id):
    post = Post.objects.get(id=id)
    comments = post.comments.all().order_by('-commented_on')
    total_comments = post.comments.all().count()
    form = CommentForm()

    if request.method == 'POST':
        form = CommentForm(request.POST, instance=post)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.post = post
            instance.save()

    context = {
        'post' : post,
        'comments' : comments,
        'form' : form,
        'total_comments' : total_comments,
    }
    return render(request, 'blog/detail.html', context)

【问题讨论】:

    标签: django forms model comments rendering


    【解决方案1】:

    当您尝试保存新评论时,基本上您将错误的模型实例传递给表单:

    form = CommentForm(request.POST, instance=post)
                                     ^^^^^^^^^^^^^
    

    其实不用这样,你可以简单的声明表单实例:

    form = CommentForm(request.POST)
    

    这是一个小的重构代码:

    def post_detail(request, id):
        post = Post.objects.get(id=id)
        form = CommentForm(request.POST or None)
        if request.method == 'POST':
            if form.is_valid():
                instance = form.save(commit=False)
                instance.post = post
                # instance.comment_by = request.user
                instance.save()
        comments = post.comments.all().order_by('-commented_on')
        total_comments = comments.count()
        context = {
            'post' : post,
            'comments' : comments,
            'form' : form,
            'total_comments' : total_comments,
        }
        return render(request, 'blog/detail.html', context)
    

    【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2013-04-16
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多