如何过滤一个查询集中的项目以免出现在 django 中的另一个查询集中

问题描述 投票:0回答:1

我有一个 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)

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

python django django-views django-queryset
1个回答
0
投票

您必须使用

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

© www.soinside.com 2019 - 2024. All rights reserved.