2

だから私は投票でランク付けされたすべての投稿の上位4つの投稿を返そうとしています。しかし、ユーザーが自分のページに既に読み込んでいる投稿を返したくありません。ユーザーがチェックするためにロードした投稿 pk の配列があります。しかし、このようにスライスの前にクエリの投稿を単純に除外することはできません

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

上位 4 つの投稿のいずれかが除外された場合、5 番目、6 番目、7 番目、または 8 番目の上位の投稿が返される可能性があるためです。

pk の 1 つが excludePks の pk と一致する場合、上位 4 の投稿のみを除外したいと思います。

スライスの後でフィルタリングを試みましたが、スライスは SQL で LIMIT を実行するのと同等であるため、それは不可能であることがわかりました。

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

結果としてトップ 4 以下の投稿を返さずに、トップ 4 の投稿を除外する良い方法はありますか?

4

1 に答える 1