【问题标题】:How am I able to display my comment replies in Django我如何在 Django 中显示我的评论回复
【发布时间】:2019-10-21 12:21:15
【问题描述】:

我有一个用户可以发帖的系统,我最近做了一个系统,以便用户可以回复这些 cmets。但是,它们不会显示。这是一些代码。 VIEWS.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 的某些东西有关,但我不知道是什么。

我尝试将replys 更改为replies,但出现错误,我将其简单地更改为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

我去掉了这些字段,因为它们并不重要

【问题讨论】:

  • 请展示您的模型。
  • 完成。我取出了这些字段,因为它们与错误没有任何关系

标签: python html django django-models django-views


【解决方案1】:

评论到回复的链接叫replies,是经理。

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

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多