Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django缓存外键_Django_Django Models - Fatal编程技术网

django缓存外键

django缓存外键,django,django-models,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',ob

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

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)
将其存储到缓存中。现在我尝试从此缓存访问
照片。name
,不执行任何查询。当我查询
照片时。category
执行查询。有没有办法防止这种情况发生。我只需要类别的id,在获得id后,我可以查询类别缓存以获取元素。实现这一点的解决方案是什么。缓存这张照片大大提高了我的基准测试,我正试图从中获得更高的性能。

如果你只是想要ID,你可以做
照片。category\u ID


您可能还希望在查询原始照片时使用
选择相关()
来获取相关类别。

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

记住queryset是懒惰的。 如果将其保存到数据库,下次从缓存访问时,它也将包含外键数据。希望这有帮助

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