先上代码:
models.py
class TypeA (models.Model ):
...
@property
def field (self ):
if self.typeb_set.count ():
return self.typeb_set
...
class TypeB (models.Model ):
...
typea = models.ForeignKey (TypeA )
...
其中 TypeA 和 TypeB 是一对多的关系。
templates/some_page.html
{% for item in items %}
{% for obj in item.obj_list %} {# 此处的 obj 与 models.py 中的 TypeA 对应 #}
<ol>
<li>{ obj.f1 }</li>
<li>{ obj.f2 }</li>
<li>{ obj.f3 }</li>
<li>{ obj.field }</li>
</ol>
{% endfor %}
{% endfor %}
每次执行到{{ obj.field }}时都会查询一次 TypeB 对应的表,现在如果 obj 的个数非常多就会有很多次查询,严重影响页面加载速度。
查了下似乎 prefetch_related ()和 select_related ()跟这个问题相关,但是手册里介绍的跟上面这种情况有略有区别。
请问有什么优化的方法吗?
1
ljdawn 2015-09-07 20:18:10 +08:00
就是用 related 呀
|
2
facert 2015-09-08 12:23:06 +08:00
foreignkey 用 select_related
|