У меня есть кнопка «Добавить комментарий» под сообщением, которая перенаправляет на URL с формой для комментария, и работает нормально, но ...
Я хотел бы, чтобы эта форма отображалась под сообщением.
Я попытался включить URL с формой комментария в шаблон post_detail.html
, но получил ошибки о том, что форма недействительна. Когда я передавал форму в PostDetail()
контекст, она отображалась, но теперь работает.
Как мне объединить PostDetail()
с моим CommentForm()
для отображения по тому же URL?
Вот части моего кода:
models.py
class Comment(models.Model):
author = models.ForeignKey(User, related_name='comments', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True)
text = models.TextField()
text_html = models.TextField(editable=False)
post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
approved_comment = models.BooleanField(default=False)
def __str__(self):
return self.text
def save(self, *args, **kwargs):
self.text_html = misaka.html(self.text)
super().save(*args, **kwargs)
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = models.Comment
fields = ('text',)
views.py
class PostDetail(SelectRelatedMixin, generic.DetailView):
model = models.Post
select_related = ('user', 'group')
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(user__username__iexact=self.kwargs.get('username'))
...
@login_required
def add_comment_to_post(request, pk, **kwargs):
post = get_object_or_404(models.Post, pk=pk)
if request.method == 'POST':
form = forms.CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.author = request.user
comment.save()
return redirect('posts:single', username=post.user, pk=post.pk)
else:
form = forms.CommentForm()
return render(request, 'posts/comment_form.html',{'form': form})
post_detail.html
{% extends "posts/post_base.html" %}
{% block post_content %}
<div class="col-md">
{% include "posts/_post.html" %}
</div>
{% endblock %}
{% block post_post %}
{% if user.is_authenticated %}
<div class="container comments">
<!-- COMMENTS FORM IN HERE -->
<a class="btn btn-primary add-comment" id="add-comment" href="{% url 'posts:add_comment' username=post.user.username pk=post.pk %}">Add Comment</a>
{% for comment in post.comments.all %}
<div class="jumbotron comment">
<p>{{ comment.author }} <span>{{ comment.created_at }}</span></p>
<p>{{ comment.text_html|safe }}</p>
</div>
{% endfor %}
</div>
{% endif %}
{% endblock %}
Я буду очень благодарен за то, что хотя бы объяснил, какие шаги мне нужно предпринять для достижения описанного результата.