Django 根据模板名称过滤查询集

在我的 Django 应用程序中,我有 2 个模型。一种叫做 Post,一种叫做 Categories。当用户单击某个类别时,我只希望该类别中的帖子出现在类别详细信息视图中。例如,如果用户单击医疗类别,我只希望显示医疗类别中的帖子。


楷模:


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 %}


小唯快跑啊
浏览 194回答 1
1回答

喵喵时光机

在 a 中DetailView,您可以Category通过self.object.所以在你的get_context_data方法中你可以这样做:context['category_posts']&nbsp;=&nbsp;Post.objects.filter(live=True,&nbsp;category=self.object)请注意,self.object可能是None这样,你可能要应对这种情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python