django缓存外键

时间:2013-01-11 15:10:36

标签: django django-models

我正在创建一个数据库模型与此类似的网站。

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后,我可以查询类别缓存来获取元素。实现这个的解决方案是什么?缓存这个显着改善了我的基准测试,我试图从中获得更多的性能。

2 个答案:

答案 0 :(得分:2)

如果您只想要ID,可以photos.category_id

您可能还希望使用select_related()进行探索,以便在查询原始照片时获取相关类别。

答案 1 :(得分:0)

我自己想出了答案。我的问题是,当我从缓存中检索对象并且我查询id时,它会对实际数据库进行另一次查询。解决方案很简单。在将查询集保存到缓存之前,只需查询外键。 像

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

请记住,查询集很懒惰。 如果将其保存到数据库,则下次从缓存中访问它时,它也将包含外键数据。希望这会有所帮助。