【发布时间】:2012-07-30 01:33:31
【问题描述】:
我注意到我的 django 代码经常使用完全相同的查询调用我的数据库。
我了解,当我实际需要数据显示在页面上或进行评估时,会产生 db hit。但是,我的模板代码如下所示:
模板:
{% if item.listing %}
{{ item.name }} text <strong>{{ item.listing|lowestprice }}</strong> more text
{% else %}
{{ item.name }} even more text
{% endif %}
....
{% for listed_item in item.listing %}
....
{% endfor %}
自定义过滤器:
def lowestprice(value):
try:
val = unicode(value[0].price) + unicode(value[0].symbol)
return val
except:
return "not available"
这段代码在我的数据库中命中了 3 次。首先是模板{% if .. %},其次是我的自定义过滤器,第三是{% for %} 循环。
listing 是我的模型类的一种方法,它返回一个带有一些非常昂贵的连接的原始 SQL 查询集。
def listing(self):
return Universe.objects.raw("ONE HELL OF A QUERY")
如何减少我的代码只访问数据库一次?
编辑:使用with 有效,但是否可以避免数据库命中自定义过滤器?
【问题讨论】:
标签: django django-models django-templates