【问题标题】:Trying to filter after a sliced queryset尝试在切片查询集后过滤
【发布时间】:2013-07-20 02:22:46
【问题描述】:

所以我试图返回所有帖子中的前 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)

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

【问题讨论】:

    标签: django filter slice django-queryset


    【解决方案1】:

    并非如此,但由于只有 4 个,而且无论如何您之后都需要数据,因此请在 Python 中进行过滤。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-05
      • 2021-08-17
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 2010-10-30
      • 2017-12-26
      • 1970-01-01
      相关资源
      最近更新 更多