我正在创建一个数据库模型与此类似的网站。
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后,我可以查询类别缓存来获取元素。实现这个的解决方案是什么?缓存这个显着改善了我的基准测试,我试图从中获得更多的性能。
答案 0 :(得分:2)
如果您只想要ID,可以photos.category_id
。
您可能还希望使用select_related()
进行探索,以便在查询原始照片时获取相关类别。
答案 1 :(得分:0)
我自己想出了答案。我的问题是,当我从缓存中检索对象并且我查询id时,它会对实际数据库进行另一次查询。解决方案很简单。在将查询集保存到缓存之前,只需查询外键。 像
get photo object from database
q=photos.category
cache.set('object',object,timeout)
请记住,查询集很懒惰。 如果将其保存到数据库,则下次从缓存中访问它时,它也将包含外键数据。希望这会有所帮助。