所以我试图返回所有帖子的前4个帖子,按投票排名。但我不想返回用户已经在他/她的页面上加载的任何帖子。我有一个用户已加载检查的post 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位以下发帖?
答案 0 :(得分:0)
不是真的,但是因为只有4个,所以无论如何你都需要数据,用Python过滤。
posts = [post for post in Post.objects.order_by('-votes')[:4]
if post.pk not in excludePks]