Комментарий с ответами в django
Я работаю над приложением для блога на django и я добавил раздел комментариев в блог, но у меня проблема с отображением ответов для родительского комментария.
Models.py
class Comment(models.Model):
comment_text = models.TextField(("comment_text"))
user = models.ForeignKey("account.User", related_name=("comment_user"), on_delete=models.CASCADE)
post = models.ForeignKey("Post", related_name=("comment_post"), on_delete=models.CASCADE)
reply = models.ForeignKey('self',related_name=("replies"), on_delete = models.CASCADE , blank= True ,null=True)
timestamp = models.DateTimeField(("Comment Timestamp"), auto_now=False, auto_now_add=True)
def __str__(self):
return self.user.username
blog.html
<div Class ="container">
<h3><b>Comments...</b></h3>
<div class ="row">
<div class = "col-8">
<div class ="row">
{% if not post.comment_post.all %}
No comments Yet
{% else %}
{% for comment in post.comment_post.all %}
{% if comment.reply is Null%}
<br>
<hr>
<div class = "col-2">
<img class="rounded-circle" width="80" height="60" src="{{comment.user.profile_image.url}}">
</div>
<div class ="col-10">
<strong>{{comment.user.first_name}} {{comment.user.last_name}}</strong>
<span class ="float-end"><i class="far fa-clock"></i> {{comment.timestamp.date}}</span>
<p>{{comment.comment_text}}</p>
</div>
{%endif%}
{% endfor%}
<hr>
<br>
{% endif %}
<div>
{{form|crispy}}
<span class ="float-start">Post Comment as: <b>{{request.user.first_name}} {{request.user.last_name}} </b></span>
<button type="button" class="btn btn-primary btn-sm float-end mb-2">Post comment</button>
</div>
</div>
</div>
<div class ="col-4 bg-info">
....
</div>
</div>
</div>
views.py
class PostDetailView(FormMixin,DetailView):
model = Post
form_class = CommentForm
template_name = 'MainSite/blogpost.html'
Я не могу придумать, как показать ответы под родительским комментарием.
Заранее спасибо и любой совет будет полезен
вы можете создать новую модель для ответов на комментарии и наследовать модель комментариев с внешним ключом
пример:
class Comment(models.Model):
#your fields (example; author and body)
class CommentAnswer(models.Model):
comment = models.ForeignKey(Comment, on_delete=models.CASCADE)
#other fields (example; author or body)
а в шаблоне можно использовать 'for loop' для показа всех ответов:
<h2> {{comment.author}} </h2>
<p>{{comment.body}}</p>
{% for answer in comment.commentanswer_set.all %}
<p>{{answer.author}} -- {{answer.body}} </p>
{% endif %}
а также в вашем 'DetailView': model = Comment который из материнского класса