我的模特:
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页面上,所有关于帖子的信息也被提交,但评论不起作用。重要的是,我希望在相同的网址上显示评论与帖子
答案 0 :(得分:1)
您的根本误解是您需要两个视图(因此需要两个URL)。你没有。您需要汇总整个响应并从单个视图返回它。
一种可能性是在视图中执行此操作。但是,由于评论与帖子有关,最简单的方法就是遵循模板中的关系:
{{ post.message }}
{% for comment in post.comment.all %}
{{ comment.body }}
{% endfor %}
(注意,您已通过设置comment
明确将反向关系设置为related_name
。这没有任何意义,因为有很多评论。真的,你应该没有定义相关的名称,除非你有一个非常好的理由,你不在这里;默认的comment_set
是完全有效的,更有意义。)