如何使用我的实际django模型优化我的数据库查询?

时间:2009-08-24 12:27:22

标签: sql django django-models django-templates

我无法发布图片,因为我是新手,所以这里是what I want的链接。

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

{% 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 个答案:

答案 0 :(得分:2)

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

文档非常详尽。

答案 1 :(得分:0)

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

来自文档:

  

QuerySets很懒 - 创建QuerySet的行为不涉及任何数据库活动。您可以整天将过滤器堆叠在一起,在评估QuerySet之前,Django实际上不会运行查询。