我有一个 Django 视图,通过从数据库中获取所有帖子并将其剪切到前四个帖子中,我可以获得“top_posts”的第一个查询集。在同一视图中,我想通过过滤类别为“政治”的帖子来获取“politics_posts”。但我希望帖子出现在“top_posts”中,而不是出现在“politics_posts”中。 我尝试过使用排除,但似乎不起作用。以下是我的观点,目前不起作用:
def homepage(request):
top_posts = Post.objects.all()[:4]
politics_posts = Post.objects.filter(category='news').exclude(pk__in=top_posts)
context={"top_posts":top_posts, "politics_posts":politics_posts}
return render(request, 'posts/homepage.html', context)
任何帮助都将受到高度赞赏。谢谢。
您必须使用
values_list
将代码更改为类似的内容才能仅获取列表中的 pks。否则,您将尝试比较 Post 对象列表和 exclude
代码
top_posts = Post.objects.all()[:4]
top_post_pks = top_posts.values_list('pk', flat=True)
politics_posts = Post.objects.filter(category='news').exclude(pk__in=top_post_pks)
...
也许你需要做
category=politics
。在您提出的问题中 category=news