在我的Django应用中,我有2个模型。一种叫做发布,一种叫做类别。当用户单击类别时,我只希望该类别中的帖子出现在类别详细信息视图中。例如,如果用户单击医疗类别,我只希望显示医疗类别中的帖子。
型号:
class Category(models.Model):
title = models.CharField(max_length=200)
colorcode = models.CharField(max_length=20, blank=True, null=True)
description = models.TextField()
image = models.ImageField(blank=True, null=True)
slug = models.SlugField(unique=True)
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
sub_description = models.TextField(blank=True, null=True)
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True)
image = models.ImageField(blank=True, null=True)
live = models.BooleanField(default=False)
slug = models.SlugField(unique=True)
观看次数:
class CategoryDetailView(DetailView):
model = Category
def get_context_data(self, **kwargs):
context = super(CategoryDetailView, self).get_context_data(**kwargs)
context['category_posts'] = Post.objects.filter(live=True)
return context
模板:
{% for post in category_posts %}
<div class="post">
<div class="post-title">
{{ post.title }}
</div>
<div class="post-author">
{{ post.author }}
</div>
</div>
{% endfor %}
答案 0 :(得分:2)
在DetailView
中,您可以通过Category
访问要渲染的实际对象(在您的情况下为self.object
实例)。
因此,您可以使用get_context_data
方法:
context['category_posts'] = Post.objects.filter(live=True, category=self.object)
请注意,self.object
可能是None
,所以您可能想处理这种情况。