Django 尝试在切片查询集之后进行筛选

Django 尝试在切片查询集之后进行筛选,django,filter,slice,django-queryset,Django,Filter,Slice,Django Queryset,因此,我试图返回所有帖子中排名前4位的帖子,按票数排序。但是我不想返回用户已经加载到他/她的页面上的任何帖子。我有一个用户加载的post pk数组要检查。但我不能像这样简单地排除切片之前的查询 posts = Post.objects.order_by('-votes') posts = posts.exclude(pk__in = excludePks) posts = posts[:4] 因为如果前4名中的任何一个被排除在外,我可以得到第5、第6、第7或第8名 我只想排除前4名中的帖子,如

因此,我试图返回所有帖子中排名前4位的帖子,按票数排序。但是我不想返回用户已经加载到他/她的页面上的任何帖子。我有一个用户加载的post pk数组要检查。但我不能像这样简单地排除切片之前的查询

posts = Post.objects.order_by('-votes')
posts = posts.exclude(pk__in = excludePks)
posts = posts[:4]
因为如果前4名中的任何一个被排除在外,我可以得到第5、第6、第7或第8名

我只想排除前4名中的帖子,如果其中一个pk与excludePks中的pk匹配

我尝试在片段之后进行过滤,但我发现,这是不可能的,因为片段相当于在SQL中进行限制

posts = Post.objects.order_by('-votes')[:4]
posts = posts.exclude(pk__in = excludePks)

有没有一种好方法可以排除前四名中的帖子,而不返回前四名以下的帖子?

没有,但是因为只有4个帖子,而且之后您将需要这些数据,所以请使用Python进行筛选

posts = [post for post in Post.objects.order_by('-votes')[:4]
           if post.pk not in excludePks]