2

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

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

因为如果排除了前 4 个帖子中的任何一个,我可以获得第 5、第 6、第 7 或第 8 个热门帖子。

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

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

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

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

4

1 回答 1

0

不是真的,但因为只有 4 个,而且无论如何你都需要数据,所以在 Python 中进行过滤。

posts = [post for post in Post.objects.order_by('-votes')[:4]
           if post.pk not in excludePks]
于 2013-07-21T04:46:11.040 回答