Система комментариев блога с представлением на основе классов в Django

Вот представление на основе функций, которое у меня есть, и оно работает нормально:

def PostDetailView(request, slug):
post = Post.objects.get(slug = slug)
comments = post.comment_set.all()
new_comment = None

if request.method == 'POST':
    form = CommentCreateForm(request.POST)
    if form.is_valid():
        new_comment = form.save(commit = False)
        new_comment.post = post
        new_comment.save()
else:
    form = CommentCreateForm()

context = {'post': post, 'comments': comments, 'form': form, 'new_comment': new_comment}
return render(request, 'blog/post-detail.html', context)

Я пытаюсь преобразовать это в представление, основанное на классах, в соответствии со следующим:

class PostDetailView(FormMixin, DetailView):
model = Post
template_name = 'blog/post-detail.html'
form_class = CommentCreateForm
new_comment = None

def get_success_url(self):
    return reverse('post_detail', kwargs={'slug': self.object.slug})

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['comments'] = self.object.comment_set.all()
    context['form'] = self.get_form()
    context['new_comment'] = self.new_comment
    return context

def post(self, request, *args, **kwargs):
    self.object = self.get_object()
    form = self.get_form()
    if form.is_valid():
        return self.form_valid(form)
    else:
        return self.form_invalid(form)

def form_valid(self, form):
    form.instance.post = self.object
    form.save()
    self.new_comment = True
    return redirect(self.object.get_absolute_url())

Шаблон выглядит следующим образом:

<h1>{{post.title}}</h1>
 
{{post.body|linebreaks}}
 
{% with comments.count as total_comments %}
    <h2>{{ total_comments}} comment{{total_comments|pluralize}}</h2>
{% endwith %}

{% for comment in comments %}
    <div class="comment">
        <p class="info">
            Comment {{forloop.counter}} by {{comment.name}} {{comment.created}}
        </p>
        {{comment.body|linebreaks}}
    </div>
{% empty %}
    <p>There are no comments yet.</p>
{% endfor %}

{% if new_comment %}
    <h2>Your comment has been added.</h2>
{% else %}
    <h2>Add a new comment</h2>
    <form method = "post">
        {{form.as_p}}
        {% csrf_token %}
        <p>
            <input type="submit" value="Add comment">
        </p>
    </form>
{% endif %}

В частности, после того, как пользователь отправил комментарий, я хочу скрыть форму комментария. Это прекрасно работает (через переменную 'new_comment'. Я пытался воссоздать то же самое в представлении на основе класса, но, похоже, это не работает.

Как сделать так, чтобы представление передавало обновленное значение 'new_comment' в качестве контекста шаблону в представлении на основе класса?

Вернуться на верх