正如标题所说,我需要获取当前帖子的类别以在“相关帖子”部分中使用它,更准确地说是在cat_posts = Post.objects.filter(Category=????)
(不要介意评论变量,因为我从这篇文章中删除了部分 PostView)
这是我的代码
views.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})
models.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')
答案 0 :(得分:1)
您可以使用 post.Category
获得它(因此 post
*object,而不是 类):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] 到 Category
比使用 CharField
更好:如果您稍后更改类别名称,那么您的帖子不再指向有效类别。
注意:通常Django模型中字段的名称是用snake_case写的,而不是PerlCase,所以应该是:{ {1}} 而不是 。category