Я пишу веб-приложение и хотел бы добавить функциональность комментариев / ответов. Комментарии работают хорошо, но при попытке добавить ответы все ответы сохраняются только в первом комментарии, даже если они добавлены из других комментариев.
Я бы хотел, чтобы ответы были связаны с другими комментариями.
Ответы связаны с конкретным комментарием с использованием отношения ForeignKey () и related_manager.
Я пробовал цикл for для получения каждого комментария от моделей Comment () в шаблоне, и хотя он хорошо отображает каждый комментарий, я не могу связать их с их конкретными ответами.
# models.py
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
name = models.CharField(max_length=400)
email = models.EmailField()
text = models.TextField()
time_stamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "Comment %s by %s" %(str(self.text)[:20], self.name)
class ReplyComment(models.Model):
comment_reply = models.ForeignKey(Comment, on_delete=models.CASCADE, related_name="replies")
name_reply = models.CharField(max_length=400)
text_reply = models.TextField()
time_stamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "Reply by %s to %s" %(self.name_reply, str(self.comment_reply))
# views.py
def article(request, slug):
article = Article.objects.get(slug=slug)
comments = Comment.objects.filter(article=article)
# comment form
if request.method == 'POST':
form = CommentForm(request.POST or None)
reply_form = ReplyCommentForm(request.POST or None)
if form.is_valid():
text = form.cleaned_data['text']
email = form.cleaned_data['email']
name = form.cleaned_data['name']
# create the comment
comment = Comment(article=article, text=text,
email=email, name=name)
comment.save()
if reply_form.is_valid():
name_reply = reply_form.cleaned_data['name_reply']
text_reply = reply_form.cleaned_data['text_reply']
comment = Comment.objects.get(id=request.POST.get('comment_id'))
reply_comment = ReplyComment(name_reply=name_reply, text_reply=text_reply, comment_reply=comment)
reply_comment.save()
else:
form = CommentForm()
reply_form = ReplyCommentForm()
context = {'article': article, 'form': form, 'reply_form' : reply_form, 'comments': comments}
return render(request, 'main/article.html', context)
<!-- Comment Section -->
<section class="section scrollspy">
<div class="container">
<ul class="collection">
{% for comment in comments %}
<li class="collection-item">
<span class="secondary-content">{{ comment.time_stamp }}</span>
<h5 class="title">{{ comment.name }}</h5>
<p>{{ comment.text }}</p>
<a href="#reply-modal" class="modal-trigger" data-target="reply-modal"><i
class="material-icons">reply</i></a>
<div class="modal" id="reply-modal">
<div class="modal-content">
<form action="" method="post">
<input type="hidden" name="comment_id" value="{{ comment.id }}">
{% csrf_token %}
<div class="row">
<p>Add a Reply</p>
<div class="input-field col s6">
{{ reply_form.name_reply }}
</div>
<div class="input-field col s12">
{{ reply_form.text_reply }}
</div>
</div>
<button type="submit" class="black white-text btn-small waves-effect">Reply</button>
</form>
</div>
</div>
<div class="container">
{% for reply in comment.replies.all %}
{{ reply.name_reply }}<br>
{{ reply.text_reply }}<br><br>
{% endfor %}
</div>
</li>
{% endfor %}
</ul>
</div>
</section>
Я ожидаю, что каждый добавленный ответ будет связан с их конкретными комментариями и связан как таковой.
Я благодарен за любую помощь.