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它的那一刻执行查询。有什么办法可以防止这种情况。我只想要category的id,拿到id后,可以查询category缓存获取元素。实现这一点的解决方案是什么。缓存它显着提高了我的基准,我正试图从中获得更多性能。

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 回答