Как я могу отображать ответы на мои комментарии в Django? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть система, где пользователи могут создавать сообщения, и я недавно сделал это, чтобы пользователи могли отвечать на эти комментарии. Тем не менее, они не будут отображаться. Вот код 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

Я вынул поля, так как они не важны

1 Ответ

1 голос
/ 21 октября 2019

Ссылка от комментария к ответу называется replies, и это менеджер.

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