首页 > 解决方案 > 获取当前帖子的类别

问题描述

所以正如标题所说,我需要获取当前帖子的类别以在“相关帖子”部分中使用它,更准确地说是放入什么cat_posts = Post.objects.filter(Category=????) (不要介意评论变量,因为我从这篇文章中删除了我的 PostView 的一部分)

这是我的代码

视图.py

def PostView(request, slug):
template_name = 'post-page.html'
post = get_object_or_404(Post, slug=slug)
comments = post.comments.filter(active=True)

cat_posts = Post.objects.filter(Category=Post.Category)
cat_posts = cat_posts.order_by('-Date')[:3}

return render(request, template_name, {'post': post,
                                       'cat_posts':cat_posts})

模型.py

class Category(models.Model):
name = models.CharField(max_length=100)

def __str__(self):
    return str(self.name)



class Post(models.Model):
title = models.CharField(max_length=120)
Category = models.CharField(max_length=120, default='None')
Thumbnail = models.ImageField(null=True, blank=True, upload_to="images/")
Text = RichTextField(blank=False, null=True)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
Overview = models.CharField(max_length=400)
Date = models.DateTimeField(auto_now_add=True)
main_story = models.BooleanField(default=False)


def __str__(self):
    return str(self.title)

def get_absolute_url(self):
    # return reverse('about', args=(str(self.id)))
    return reverse('home')

标签: django

解决方案


您可以使用post.Category(所以post*对象,而不是Post类)获得它:

def PostView(request, slug):
    template_name = 'post-page.html'
    post = get_object_or_404(Post, slug=slug)
    comments = post.comments.filter(active=True)
    cat_posts = Post.objects.filter(
        Category=post.Category
    ).order_by('-Date')[:3]
    return render(
        request,
        template_name,
        {'post': post, 'cat_posts':cat_posts}
    )

然而,使用ForeignKey[Django-doc]比使用Categorya更好CharField:如果您稍后更改类别的名称,那么您的帖子不再指向有效的类别。


注意:通常 Django 模型中的字段名称是用 snake_case 编写的而不是PerlCase,所以它应该是:category而不是Category.


推荐阅读