Есть комментарий, у него кнопка reply. По нажатию открывается формочка с input для нового коммента и кнопка отправить.
Идея - по нажатию отправить - добавлять к POST запросу аттрибут, который передает родительский комментарий и во вьюхе принимать его и сохранять комментарий с родительским.
Вопрос в том, как в запрос передать название родительского комментария?
models.py
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField('Содержание', max_length = 300, default = '')
created_date = models.DateTimeField(auto_now_add=True)
parent = models.ForeignKey(
'self',
default=None,
blank=True, null=True,
on_delete=models.CASCADE,
related_name='parent_%(class)s',
verbose_name='parent comment'
)
def __str__(self):
return self.content
class Meta:
ordering = ['-created_date']
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('content', )
views.py
def detail(request, slug):
html = 'detail.html'
post = get_object_or_404(Post, slug=slug)
if request.method == "POST":
parent = request.POST.get('parent', None)
print(parent)
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.user = request.user
comment.parent = parent
comment.save()
return redirect('detail_man_post', slug=post.slug)
else:
form = CommentForm()
detail.html
<ol class="commentlist">
{% for comment in detail.comments.all %}
<li class="depth-1 comment">
<div class="comment__avatar">
<img width="50" height="50" class="avatar" src="{{ comment.user.avatar.url }}" alt="">
</div>
<div class="comment__content">
<div class="comment__info">
<cite>{{ comment.user }}</cite>
<div class="comment__meta">
<time class="comment__time">{{ comment.created_date }}</time>
<div class="clickreply" style="">
<span class="btn clickreply" id="replyb">Ответить</span>
</div>
<b> <form class = 'reply' method="POST" name="contactForm" id="contactForm" style="display:none" >
{% csrf_token %}
<div class="message form-field">
{{ form.content }}
</div>
<button type="submit" class="submit btn--primary btn--large full-width">Отправить</button>
</form>
</b>
<!-- end form -->
{% if request.user.pk == comment.user.pk %}
<a class="reply" href="{% url 'comment_remove' pk=comment.pk %}">Удалить</a>
{% endif %}
</div>
</div>
<div class="comment__text">
<p>{{ comment.content|linebreaks }}.</p>
</div>
</div>
{% if comment.parent %}
Дочерний коммент {{ comment.parent.content }} Пользователь {{ comment.parent.user }}
<ul class="children">
<li class="depth-2 comment">
<div class="comment__avatar">
<img width="50" height="50" class="avatar" src="{{ comment.parent.user.avatar.url }}" alt="">
</div>
<div class="comment__content">
<div class="comment__info">
<cite>{{ comment.parent.user }}</cite>
<div class="comment__meta">
<time class="comment__time">{{ comment.parent.created_date }}</time>
<div class="clickreply" style="">
<span class="btn clickreply" id="replyb">Ответить</span>
</div>
<<b>form class = 'reply' method="POST" name="contactForm" id="contactForm" style="display:none" >
{% csrf_token %}
<input type="hidden" name="parent" value='qweqweqwe'>
<div class="message form-field">
{{ form.content }}
</div>
<button type="submit" class="submit btn--primary btn--large full-width">Отправить</button>
</form> <!-- end form --></b>
{% if request.user.pk == comment.user.pk %}
<a class="reply" href="{% url 'comment_remove' pk=comment.pk %}">Удалить</a>
{% endif %}
</div>
</div>
<div class="comment__text">
<p>{{ comment.parent.content }}</p>
</div>
</div>
</li>
</ul>
{% endif %}
</li>
{% empty %}
<h1>Нет комментариев</h1>
</li> <!-- end comment level 1 -->
{% endfor %}
</ol>