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
Python 在外键上缓存Django SQL查询_Python_Django_Django Templates - Fatal编程技术网

Python 在外键上缓存Django SQL查询

Python 在外键上缓存Django SQL查询,python,django,django-templates,Python,Django,Django Templates,我有一个模型,其中包含不同模型的外键: class MyModel(models.Model): ... picture = models.ForeignKey(Picture) ... 在我的模板中,我有一个MyModel的实例,在三个不同的地方,我以这种方式访问它的picture属性{{MyModel.picture} 当我打开debug_工具栏时,我看到对数据库进行了三种不同的SQL查询。Django不应该缓存第一个查询并在之后提供它吗?可以这样做吗?您可以尝试使用标签

我有一个模型,其中包含不同模型的外键:

class MyModel(models.Model):
   ...
   picture = models.ForeignKey(Picture)
   ...
在我的模板中,我有一个MyModel的实例,在三个不同的地方,我以这种方式访问它的picture属性
{{MyModel.picture}


当我打开debug_工具栏时,我看到对数据库进行了三种不同的SQL查询。Django不应该缓存第一个查询并在之后提供它吗?可以这样做吗?

您可以尝试使用标签
{%with p=mymodel.picture%}…{%endwith%}
,请参见此处:

是的,Django应该在第一个查找之后缓存该查找。肯定还有其他事情发生-您确定每次都有相同的
mymodel
实例吗?
{% with picture = mymodel.picture %}

My Picture Size Large {{ picture }}
My Picture Size Medium {{ picture }}
My Picture Size Small  {{ picture }}

{% endwith %}