将Django注释指向特定对象

时间:2015-06-25 00:20:07

标签: python django

我在将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})`

2 个答案:

答案 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中了解有关关系的更多信息。