为什么django不显示评论?

时间:2017-10-02 12:22:58

标签: python django

我的模特:

class Post(models.Model):
    message = models.TextField(max_length=4000)
    topic = models.ForeignKey(Topic, related_name='posts')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(null=True)
    created_by = models.ForeignKey(User, related_name='posts')
    updated_by = models.ForeignKey(User, null=True, related_name='+')


class Comments(models.Model):
    creator = models.ForeignKey(User, related_name='comment')
    body = models.TextField(max_length=4000)
    post = models.ForeignKey(Post, related_name='comment', null=True)

我的观点:

def p(request, pk):
    topic = get_object_or_404(Topic, pk=pk)
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'post.html', {'post': post, 'topic': topic})

def comments(request, pk):
    comment = get_object_or_404(Comments, pk=pk)
    return render(request, 'post.html', {'comment': comment})

我的网址:

url(r'^boards/(\d+)/(?P<pk>\d+)$', views.p, name='p'),
url(r'^boards/(\d+)/(\d+)/$', views.comments, name='comments'),

我可以理解,使用主键的问题,如果帖子都运行良好,但当我尝试在一个页面中渲染不同的模型时,看起来django不喜欢它。我在url模式中尝试了很多组合,但没有解决我的问题。在post.html页面上,所有关于帖子的信息也被提交,但评论不起作用。重要的是,我希望在相同的网址上显示评论与帖子

1 个答案:

答案 0 :(得分:1)

您的根本误解是您需要两个视图(因此需要两个URL)。你没有。您需要汇总整个响应并从单个视图返回它。

一种可能性是在视图中执行此操作。但是,由于评论与帖子有关,最简单的方法就是遵循模板中的关系:

{{ post.message }}
{% for comment in post.comment.all %}
  {{ comment.body }}
{% endfor %}

(注意,您已通过设置comment明确将反向关系设置为related_name。这没有任何意义,因为有很多评论。真的,你应该没有定义相关的名称,除非你有一个非常好的理由,你不在这里;默认的comment_set是完全有效的,更有意义。)