Django шаблон: отображение родительского и дочернего элементов из одной модели - PullRequest
0 голосов
/ 09 мая 2020

Я создаю блог django, и у меня есть модель комментариев, которая выглядит следующим образом:

class Comment(models.Model):
  content = models.TextField('Comment', blank=False, help_text='Comment * Required', max_length=500)
  post = models.ForeignKey('Post', on_delete=models.CASCADE, blank=False, related_name='comments')
  parent = models.ForeignKey('self', null=True, on_delete=models.SET_NULL, related_name='replies')

Я пытаюсь отобразить ответы под комментарием, используя приведенный ниже код в шаблоне:

{% for comment in comments %}
  {{ comment.content }}
  {% for reply in comment.replies.all %}
    {{ reply.content }}
  {% endfor %}
{% endfor %}

Однако в результате ответы отображаются дважды. Под комментарием они связаны сами по себе. Что я делаю не так? Почему ответы отображаются дважды. Кроме того, ответы только go одного уровня, т.е. не может быть ответа на ответ только ответ на комментарий.

1 Ответ

0 голосов
/ 09 мая 2020

Вам необходимо выполнить проверку в своем шаблоне, чтобы не отображать ответы, если с ними связан родительский элемент (поскольку они будут отображаться внутри родительского комментария). Вы можете сделать:

{% for comment in comments %}
  {% if not comment.parent %}
      {{ comment.content }}
      {% for reply in comment.replies.all %}
        {{ reply.content }}
      {% endfor %}
  {% endif %}
{% endfor %}
...