Проблемы с отображением записей и комментариев на первой странице

Я пытался решить эту проблему по крайней мере 8 часов и, возможно, я упускаю что-то очень простое. Но поскольку я очень новичок в программировании, я хочу обратиться за небольшой помощью.

Я работаю над простой страницей, на которой посетители могут размещать записи (думаю, небольшие записи в блоге), а другие посетители могут комментировать записи.

В настоящее время вы можете посетить каждый пост и просмотреть комментарии, зайдя непосредственно в них (пример: testsite.com/discussions/1 (или 2, 3 и т.д.).

).

Но я не могу понять, как отобразить все сообщения и соответствующие комментарии на ОДНОЙ странице.

Вот мой Models-view:

from django.db import models
import uuid

from django.db.models.fields import AutoField

# Create your models here.

class Post(models.Model):
    entry = models.CharField(max_length=2000)
    image = models.ImageField(null=True, blank=True, default="default_post.jpg")
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.entry

class Comments(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment_entry = models.CharField(max_length=2000, blank=True, null=True)
    created_on = models.DateTimeField(auto_now_add=True)


    class Meta:
        ordering = ['created_on']

    def __str__(self):
        return self.comment_entry

Вот мои взгляды:

from django.shortcuts import get_object_or_404, render
from .models import Post, Comments

# Create your views here.
def discussion(request, post_id):
    post = get_object_or_404(Post, pk=post_id)
    
    return render(request, 'discussions/discussions.html', {'post': post, 'replies': Comments.objects.filter(post_id=post_id)})

А вот мой шаблон:

<h1>{{ post }}</h1>
<ul>
{% for reply in replies %}
    <li>{{ reply.comment_entry }}</li>
{% endfor %}
</ul>

Короче говоря, я хочу иметь возможность отображать все сообщения и комментарии к ним на одной странице, но не могу понять этого.

Для этого можно использовать related_name:

class Comments(models.Model):
     post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='post_comments')

в HTML-странице

<h1>{{ post }}</h1>
<ul>
   {% for reply in post.post_comments.all %}
      <li>{{ reply.comment_entry }}</li>
   {% endfor %}
</ul>

так post.post_comments.all решит вашу проблему.

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