首页 > 解决方案 > 我如何在 Django 中显示我的评论回复

问题描述

我有一个用户可以发帖的系统,我最近做了一个系统,以便用户可以回复这些评论。但是,它们不会显示。这是一些代码。 意见.PY

@login_required(login_url='/mainapp/user_login/')
def add_comment_to_post(request,pk):
    post = get_object_or_404(Post,pk=pk)
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.author = request.user # add this line
            comment.save()
            return redirect('mainapp:post_detail',pk=post.pk)

    else:
        form = CommentForm()
    return render(request,'mainapp/comment_form.html',{'form':form})

def get_queryset(self):
    return Comment.objects.filter(created_date__lte=timezone.now()).order_by('-created_date')

@login_required(login_url='/mainapp/user_login/')
def add_reply_to_comment(request,pk):
    comment = get_object_or_404(Comment,pk=pk)
    if request.method == 'POST':
        form = ReplyForm(request.POST)
        if form.is_valid():
            reply = form.save(commit=False)
            reply.comment = comment
            reply.author = request.user
            reply.save()
            return redirect('mainapp:post_detail',pk=comment.pk)
    else:
        form = ReplyForm()
    return render(request,'mainapp/reply_form.html',{'form':form})
def get_queryset(self):
    return Reply.objects.filter(created_date__lte=timezone.now()).order_by('-created_date')

这些是我对帖子添加评论和查看帖子的观点。urls.py 和 models.py 不需要更改,因为它确实有效,并且它显示在管理界面和所有内容中,但是我不知道如何在我的 HTML 中显示它

{% for comment in post.comments.all %}

  {% if user.is_authenticated or comment.approved_comment %}
  <p>Posted by: <strong>{{ comment.author }}</strong></p> 
  <p id="comment-text">{{ comment.text|safe|linebreaks }}</p>
  <p>{{ comment.created_date|timesince }} ago</p><br>
{% endif %}

{% for reply in comment.replys %}
      <p>Posted by: <strong>{{ reply.author }}</strong></p> 
      <p id="comment-text">{{ reply.text|safe|linebreaks }}</p>
      <p>{{ reply.created_date|timesince }} ago</p><br>
      {% endfor %}
  {% empty %}
      <p>No comments posted.</p>
  {% endfor %}

因此,实际的父评论显示没有问题,但随后它到达for reply in comment.replys. 我不知道我在这里做错了什么。我觉得它与有关的某些东西有关in comment.replys,但我不知道是什么。

我曾尝试更改replysreplies,但出现错误,我将其简单地更改为reply,但仍然无法正常工作。然后我将其更改为post.comment.reply,但是再次,这不起作用。我已经尝试过堆和堆,但没有任何效果。

所以我想要的是将回复显示在评论下方,它应该可以工作,但它不是;我不知道我哪里出错了,所以任何帮助都会很好

编辑:这里是模型

class Comment(models.Model):
    post = models.ForeignKey('mainapp.Post',related_name='comments',on_delete=models.CASCADE)
    #...

    def get_absolute_url(self):
        return reverse('post_list')

    def __str__(self):
        return self.text

class Reply(models.Model):
    comment = models.ForeignKey('mainapp.Comment',related_name='replies',on_delete=models.CASCADE)
    #...

    class Meta:
        verbose_name_plural = "replies"

    def get_absolute_url(self):
        return reverse('post_list')

    def __str__(self):
        return self.text

我取出了田地,因为它们并不重要

标签: pythonhtmldjangodjango-modelsdjango-views

解决方案


从评论到回复的链接称为replies,它是经理。

{% for reply in comment.replies.all %}

推荐阅读