Не получается вывести комментарии в 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"
для обратной связи таблиц