Список_объектов не показывает правильный шаблон

У меня есть проект Django, в котором пользователи могут задавать вопросы и получать ответы. У меня есть три модели: Вопрос, Ответ и Комментарий. Я не знаю, почему шаблон комментария не показывает правильные данные, я не знаю, где найти данные комментария: object.comment, object.comment_set.all или что-то еще.

У меня была такая же проблема с получением данных ответа, но я успешно решил ее, используя '{% for answer in object.answer_set.all %}', но этот же метод не применяется в комментарии. Я заметил, что не понимаю, где все эти информационные стеки, которые нужно получить

Я относительно новичок в Django, поэтому буду благодарен за ответы с описанием, почему так происходит, чтобы избежать этого в проектах fitire.

models.py

class Question(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=255, unique=True, db_index=True,     verbose_name="URL")
    detail = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('detail', kwargs={'slug': self.slug})


class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    detail = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.detail


class Comment(models.Model):
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE,     related_name='comment_user')
    detail = models.TextField(default='')
    date_posted = models.DateTimeField(default=timezone.now)

views.py

class AnswerView(ListView):
    model = Answer
    template_name = 'forum/detail.html'

class CommentView(ListView):
    model = Comment
    template_name = 'forum/detail.html'

detail.html

<div class="col-11">
        {% for answer in object.answer_set.all %}
        <p>{{ answer.detail }}</p>
        <p><a href="#" class="mr-3">{{ answer.user.username }}</a>
        <span>5 комментариев</span></p>
        {% endfor %}
    </div>


            <!-- Comment Section Starts-->
        <h3 class="my-4">Комментарии:</h3>
        {% for comment in comment.answer.all %}
            <div class="card mb-3">
                <div class="card-body">
                    <p>{{ comment.detail }}</p>
                    <p><a href="#">{{ comment.user.username }}</a></p>
                </div>
            </div>
        {% endfor %}

Ваши комментарии связаны с ответами отношением "многие к одному", поэтому вы можете получить их так же, как и ответы из вопросов - вам просто нужно сделать это в рамках вложенного цикла, т.е.

{% for answer in object.answer_set.all %
// your answer template stuff

    {% for comment in answer.comment_set.all %}
    // your comment template stuff
    {% endfor %}

{% endfor %}

вам нужно использовать object_list в вашем шаблоне в документации ListView написано

<div class="col-11">
    {% for answer in object_list %}  <!-- change to object_list-->
        <p>{{ answer.detail }}</p>
        <p><a href="#" class="mr-3">{{ answer.user.username }}</a>
        <span>5 комментариев</span></p>
    {% endfor %}
</div>

если нужно/хочется изменить имя переменной object_list, вы можете определить context_object_name в представлении.

Вернуться на верх