我在将Django网站中的特定对象指向特定注释时遇到问题。在下面的HTML页面上,将显示5 posts
及其各自的属性。每个post
都有自己的comment_form
,用户可以在其中发表评论。然而,当留下评论时,所有帖子都共享相同的评论,而不是他们自己独特的评论集。是否有任何人建议我为每个post
提供他们自己独特的comments
集,以便他们都不会共享相同的内容?
这是我目前的HTML:
<div class="mainContent">
<div class="content">
{% for post in posts %}
<article class="topContent">
<div>
<h1>{{ post.title }}</h1>
<p>{{ post.body }}</p>
<h6><i>published {{ post.pub_date }}</i></h6>
<div class="commentForm">
{% for comment in comments %}
<p id="commentP">{{ comment.comment }} - {{ comment.name }}</p>
{% endfor %}
</div>
<form method="POST" action="">
{% csrf_token %}
<div id='comment_form'>
<div id="namePrompt">
<p> Name:</p>
</div>
<div id="formName">
{{form.name}}
</div>
<div id="commentPrompt">
<p> Comment: </p>
<div id="formComment">
{{form.comment}}
</div>
<div id="submitBtn">
<input type='submit' name='submit' value='Add Comment'>
</div>
</div>
</form>
</div>
</article>
{% endfor %}
</div>
</div>
这是视图:
def projects(request):
print request
posts = ProjectsPost.objects.all()
comment_from_db = ProjectComment.objects.all()
form = ProjectCommentForm(request.POST or None)
if form.is_valid():
new_form = form.save(commit=False)
name = form.cleaned_data['name']
comment = form.cleaned_data['comment']
context_comment = ProjectComment.objects.get_or_create(name=name, comment=comment)
print context_comment
template = "blog/projects.html"
context = {"form":form}
project_posts = {'posts':posts}
return render(request, template, {'form':form, 'posts':posts, 'comments':comment_from_db})`
答案 0 :(得分:1)
我假设您的模型看起来像这样:
class ProjectPosts(models.Model):
....
class ProjectComments(models.Model):
....
post = models.ForeignKey(ProjectPosts)
然后在你的模板中,你需要这样做:
<div class="commentForm">
{% for comment in post.projectcomments_set.all %}
<p id="commentP">{{ comment.comment }} - {{ comment.name }}</p>
{% endfor %}
</div>
呀。您可以像模板中那样迭代反向FK关系。
编辑:我现在看到你正在查看你的观点中的所有评论,这也不适用于特定的帖子。你不需要这样做。每当您需要显示特定帖子的评论时,请在您的模板中执行上面显示的内容。答案 1 :(得分:0)
如果帖子与其相关评论之间没有关联,那么每次查询数据库时,您都会获得所有评论并将其传递给模板。
正如您在自己的评论中提到的,在Comment
模型上添加外键应该有效。因此,当您查询特定文章的评论时,您应该只能查询与该文章相关的评论。
所以本质上是这样的:
class ProjectPosts(models.Model):
....
class ProjectComments(models.Model):
....
post = models.ForeignKey(ProjectPosts)
在检索与帖子相关的所有评论时,您可以执行以下操作:
post_comment = PorjectPosts.projectcomments_set.filter(id=foo)
您可以在http://www.vectomatic.org/libs/lib-gwt-file中了解有关关系的更多信息。