2009-08-24 43 views
0

我无法发布图片,因为我是新手,因此这里是what I want的链接。如何使用我的实际django模型优化数据库查询?

所以,我有模型在左边,我想要在右边的视图。 。
截至目前,我在每一个线程我感兴趣的模板代码遍历:

{% for thread in threadlist %} 
{% for post in thread.postlist %} 
... 

型号代码:

class Thread (models.Model): 
...  
def postlist(self): 
    posts = list(self.post_set.all()) 
    return [posts.pop(0)] + posts[-2:] 

必须有办法用更少的查询,要做到这一点通过加入专栏或其他东西。我对Python/Django相当陌生,我不知道该怎么做。

回答

2

您可以使用select_related。这将使查询跟随连接,因此您最终得到一个较大的查询,而不是许多较小的查询。

该文档相当彻底。

0

看着documentationshould正在使用post_set.all()。 我很确定查询是由django在幕后加入的,而且它的懒惰。 这意味着它将不会被加载,直到它需要。

从文档:

查询集懒惰 - 创建一个查询集不涉及任何数据库活动的行为。您可以整天将过滤器堆叠在一起,并且在评估QuerySet之前,Django不会真正运行查询。

+0

我正在为每个线程进行查询,即每页10个查询。 我只想要1个循环,而不是有2个嵌套的循环。 “QuerySets懒惰”意味着它们只在必要时执行,并且在这里每个都是。我的实际解决方案不是最佳的。 – knarf 2009-08-24 12:57:53