如何在django中过滤一个查询集中的项目,防止其出现在另一个查询集中

zaq34kh6  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(87)

我有一个Django视图,我通过从数据库中获取所有Posts并将其剪切到前四个中来获取'top_posts'的第一个查询集。在同一个视图中,我想通过过滤类别为“politics”的帖子来获得“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)

任何帮助都将受到高度赞赏。谢谢.

vhmi4jdf

vhmi4jdf1#

你将不得不使用values_list将你的代码修改成这样,以只获得列表中的pk。否则,您将尝试比较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

相关问题