1

大量のレコードをフィルタリングする必要があるアプリに取り組んでいます。私はキャッシングQuerySetsと関連するものについて読んでいて、良い資料を見つけました。

qs = MyModel.objects.filter(Q(<initial_filter_to_narrow_down_size>))

この後、後で使用するためにこの qs をキャッシュに入れたいと思います。データベースにアクセスせずに、他のすべてのフィルターを適用したい。何かのようなもの

cache.set('qs', qs)

しかし、私がやるとどうなりますqs = qs.filter(q_object)か?キャッシュが変更されますか? 私はそれをしたくありません。qs更新するまでは一定に保ちたいです。この場合どうすればいいですか?

4

2 に答える 2

0

.filter() は、フィルターを適用する前にクエリセットを複製します。キャッシュは影響を受けません。

ところで、JohnnyCacheを確認することをお勧めします...クエリセットのキャッシュに関する優れたアプリです。

于 2012-10-04T12:12:37.047 に答える
0

あなたの質問から私が理解したのは、以下に示すように、キャッシュからクエリ セットを取得するだけでよいということです。

your_cached_qs = cache.get('qs')

次に、必要なフィルターを適用します。

your_new_qs = your_cached_qs.filter(further_filter)

これは、キャッシュ内のクエリ セットには影響しません。したがって、キャッシュは、自分で再度更新するまで変更されず、目的の結果が得られます。

于 2012-10-04T13:08:49.567 に答える