Проблемы с отображением записей и комментариев на первой странице
Я пытался решить эту проблему по крайней мере 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
решит вашу проблему.