2

データベースモデルがこれに似ているサイトを作成しています。

class Category(models.Model):
    name = modles.CharField(max_length=30)

class Photos(models.Model):
    name = models.CharField(max_length=30)
    category = models.ForeignKey(Category)

今、私は写真から要素を選択し、それをでキャッシュに保存していcache.set('object',object,timeout)ます。photos.nameこのキャッシュからアクセスしようとすると、クエリは実行されません。クエリを実行した瞬間にクエリがphotos.category実行されます。これを防ぐ方法はありますか?カテゴリのIDのみが必要です。IDを取得した後、カテゴリキャッシュにクエリを実行して要素を取得できます。これを実装するためのソリューションは何ですか。これをキャッシュすると、ベンチマークが大幅に改善されました。パフォーマンスを向上させようとしています。

4

2 に答える 2

2

IDだけが必要な場合は、次のことができますphotos.category_id

select_related()また、元の写真を照会するときに、を使用して関連カテゴリを取得することもできます。

于 2013-01-11T15:16:47.780 に答える
0

私は自分で答えを見つけました。私の問題は、キャッシュからオブジェクトを取得し、IDをクエリすると、実際のデータベースに対して別のクエリが実行されることでした。解決策は簡単です。クエリセットをキャッシュに保存する前に、外部キーをクエリするだけです。お気に入り

 get photo object from database
 q=photos.category
 cache.set('object',object,timeout)

クエリセットが怠惰であることを忘れないでください。これをデータベースに保存すると、次回キャッシュからアクセスするときに、外部キーデータも含まれます。お役に立てれば。

于 2013-01-11T16:11:26.280 に答える