我无法设计代码来呈现一个特定的帖子及其相关注释。问题可能出在views.py或url中。
我查看了多个来源,但没有任何结果。我是编码的新手,觉得缺少一些要点。正在正确创建帖子和评论,并且所有评论都分配了正确的post_id。
我的models.py设置如下:
class Post(models.Model):
title = models.CharField(max_length=1000)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog-home')
class Comment(models.Model):
cid = models.AutoField(primary_key=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
comment = models.TextField()
comment_date = models.DateTimeField(default=timezone.now)
def save(self, *args, **kwargs):
super(Comment, self).save(*args, **kwargs)
def __str__(self):
return self.comment
def get_absolute_url(self):
return reverse('blog-home')
我的views.py的设置如下:
class PostDetailView(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['comment_list'] = Comment.objects.filter(post=WHAT SHOULD GO HERE?)
return context
我需要在上面的过滤器中传递Post.id或帖子的主键。有人可以解释它应该是什么吗?
用于访问帖子详细信息的网址如下:
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail')
当views.py中包含以下内容时,我将帖子详细信息视图显示为帖子的作者,标题和内容:
class PostDetailView(DetailView):
model = Post
其模板如下:
{% extends "blog/base.html" %}
{% block content%}
<article class="media content-section">
<img class="rounded-circle article-img" src="{{object.author.profile.image.url}}">
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="{% url 'user-posts' object.author.username %}">{{ object.author }}</a>
<small class="text-muted">{{ object.date_posted|date:"F d, Y P e" }}</small>
{% if object.author == user %}
<div><a class="btn btn-secondary btn-sm m-1 mb-1" href="{% url 'post-update' object.id%}">Update</a>
<a class="btn btn-danger btn-sm m-1 mb-1" href="{% url 'post-delete' object.id%}">Delete</a></div>
{% endif %}
</div>
<h2 class="article-title">{{ object.title }}</h2>
<p class="article-content">{{ object.content }}</p>
</div>
</article>
{% for comment in comment_list %}
<div class='article-content'>
<p>{{comment}}</p>
</div>
{% endfor %}
{% endblock %}
我应该如何获取Post的post.id或pk并使用它来过滤仅与该特定帖子相关的评论?
此外,设置呈现查询集的模板的好方法是什么?
答案 0 :(得分:1)
您应该能够遍历模板中从Post
对象到与其链接的Comment
对象(默认为comment_set
)的反向链接:
{% for comment in post.comment_set %}
如果您想要更大的控制权,可以将查询集注入到上下文中,类似这样,以仅获取最新的六个注释。
"comments": post.comment_set.order_by("-comment_date")[:6]
所选的发布对象应在self.object
中以DetailView
的形式提供,并且默认情况下将以object
的形式注入渲染上下文中。 Classy CBV是用于导航基于Django Class的视图的结构的宝贵资源。
网站。
警告:这“不在我的头上”,所以不要以为这一切都是完美的。
答案 1 :(得分:0)
单个对象将有权访问其相关对象。 试试这个:
class PostDetailView(DetailView):
model = Post
# There's no need to define get_context_data() here
现在,您的模板将以post
(还有object
)的形式发布该帖子。
带有此post
的所有注释都可以在模板上找到,如下所示:
{% for comment in post.comment_set.all %}
<div class='article-content'>
<p>{{ comment }}</p>
</div>
{% endfor %}