Не получается вывести комментарии в django

Я не могу вывести данные о комментариях в шаблонизаторе django. У меня есть модели поста и комментария. Прикрепляю код.

models.py

from django.db import models
from django.conf import settings
from django.urls import reverse
from django.utils import timezone


class Post(models.Model):
    text = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    def __str__(self):
        return self.text

    def get_absolute_url(self):
        return reverse("post_detail", args=[str(self.id)])

    class Meta:
        ordering = ["-date"]


class Comment(models.Model):
    text = models.TextField(max_length=5000)
    date = models.DateTimeField(default=timezone.now, null=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.text

    class Meta:
        ordering = ["-date"]

views.py

@login_required(login_url="login")
def add_comment(request, comment_id):
    form = CommentForm()
    post = get_object_or_404(Post, pk=comment_id)
    author = request.user

    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.author = author
            comment.post = post
            comment.save()
            return redirect("post_detail", post.id)

    context = {"form": form}

    return render(request, "ion/comment_form.html", context)

forms.py

from django.forms import ModelForm
from .models import Comment


class CommentForm(ModelForm):
    class Meta:
        model = Comment
        fields = ["text"]

urls.py

from django.urls import path
from . import views


urlpatterns = [
    path("", views.PostListView.as_view(), name="post_list"),
    path("<int:pk>/", views.PostDetailView.as_view(), name="post_detail"),          # !!!
    path("new/", views.PostCreateView.as_view(), name="post_new"),
    path("<int:pk>/edit/", views.PostUpdateView.as_view(), name="post_edit"),
    path("<int:pk>/delete/", views.PostDeleteView.as_view(), name="post_delete"),
    path("<int:comment_id>/comment/", views.add_comment, name="add_comment"),       # !!!
]

post_detail.html

{% extends 'base.html' %}

{% block content %}
    <p>{{ post.text }}</p>
    <h2>Comments</h2>

    <div>

        {% if not post.comments.all %}
            <p>Комментариев нет <a href="{% url 'add_comment' post.id %}">Комментировать</a></p>

        {% else %}
            <a href="{% url 'add_comment' post.id %}">Комментировать</a><br/><br/>
            {% for comment in post.comments.all %}
                <b>{{ comment.author }}</b> - <span>{{ comment.date }}</span>
                <p>{{ comment.text }}</p>
            {% endfor %}

        {% endif %}

    </div>
{% endblock content %}

comment_form.html

{% extends 'base.html' %}

{% block content %}

    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Комментировать</button>
    </form>

{% endblock %}
class Comment(models.Model):
    text = models.TextField(max_length=5000)
    date = models.DateTimeField(default=timezone.now, null=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    post = models.ForeignKey(Post,related_name="comments" on_delete=models.CASCADE, null=True)

Добавляем related_name="comments" для обратной связи таблиц

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