Djangoに一般的なリストビューがあり、約300個のオブジェクトが返されます(検索が実行されない限り)。
10個のオブジェクトのみを表示するようにページ付けを設定しました。
そこで、データベースにクエリを実行し、オブジェクトを反復処理して処理し、表示前に値を追加します。300個のオブジェクトすべてが処理を完了し、処理後にページネーションが行われることに気付きました。そのため、パフォーマンスを向上させるために、表示されるオブジェクトに対してのみ処理を実行したいと思います。
1ページ目は0-10、2ページ目は11-20、3ページ目は21-30など、クエリセット内のオブジェクトのインデックスを計算します。
ここで、表示範囲内のオブジェクトのみを処理し、完全なクエリセットを返します(したがって、ジャンルビューは期待どおりに機能します)。
最初に試しました:
for object in queryset[slice_start:slice_end] :
# process things here
return queryset
しかし、スライスは新しいクエリセットを返すようであり、元のクエリセットオブジェクトには計算された値がありません。
現在、私の解決策は次のとおりです。
index = -1
for object in queryset:
index += 1
if index < slice_start or index > slice_end : continue
# process things here
return queryset
現在、これは機能しますが、Pythonにとってはかなりハッキーで、非合法のようです。これを行うためのよりPython的な方法はありますか?