我创建了模型Post and Comment,现在我想显示Post的评论,但是有问题。在tutorial中,HTML {% for comment in post.comments.all %}
中有一行代码,但是在我的应用中不起作用。如果我设置{% for comment in comments %}
,则可以使用,但是显示模型中的所有注释(我只希望帖子中的注释)。如何解决?下面我粘贴了代码。
models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=64, blank=False, null=False)
short_text = models.TextField(blank=False, null=False)
text = models.TextField(blank=False, null=False)
image = models.TextField(blank=False, null=False)
date = models.DateTimeField(auto_now_add=True, blank=True)
views = models.IntegerField(default=0)
class Comment(models.Model):
post = models.ForeignKey('main.Post', on_delete=models.CASCADE)
author = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(auto_now_add=True, blank=True)
approved_comment = models.BooleanField(default=False)
def approve(self):
self.approved_comment = True
self.save()
def __str__(self):
return self.text
views.py
from django.shortcuts import get_object_or_404, render, redirect
from .models import Post, Comment
def index_pl(request):
posts = Post.objects.all()
return render(request, 'index_pl.html', {'posts': posts})
def single_article_pl(request, id):
posts = get_object_or_404(Post, pk=id)
posts.views = posts.views + 1
posts.save()
comments = Comment.objects.all()
return render(request, 'single_article_pl.html', {'posts': posts, 'comments': comments})
html
{% for comment in post.comments.all %}
<div class="comment">
<div class="date">{{ comment.created_date }}</div>
<strong>{{ comment.author }}</strong>
<p>{{ comment.text|linebreaks }}</p>
</div>
{% empty %}
<p>No comments here yet :(</p>
{% endfor %}
admin.py
from django.contrib import admin
from .models import Post, Comment
admin.site.register(Post)
admin.site.register(Comment)
答案 0 :(得分:1)
在教程中,HTML
{% for comment in post.comments.all %}
中有一行代码,但是在我的应用中不起作用。
这可能是因为他们在ForeignKey
至Comment
的{{1}}中指定了related_name=…
parameter [Django-doc],例如:
Post
# Option 1: set the related_name to 'comments'
class Comment(models.Model):
post = models.ForeignKey(
'main.Post',
related_name='comments',
on_delete=models.CASCADE
)
# …
在 reverse 中指定关系的名称,因此在这种情况下,访问给定related_name=…
对象的Comment
s。默认情况下,该值为Post
,因此在这种情况下为model_name_set
。
因此,您可以指定一个相关名称;或者您可以访问comment_set
管理器:
comment_set