Django查询优化:可以检索组中的值吗?

时间:2011-08-01 14:26:38

标签: python django django-queryset django-orm

我有:

active = Node.objects.filter(status = 'a')
potential = Node.objects.filter(status = 'p')
hotspot = Node.objects.filter(status = 'h')

我想知道:是否有可能以更好的方式做到这一点?

编辑:也许我没有很好地解释自己。我需要有3个不同状态的列表。如果我只进行1次查询,那么我将不得不循环遍历列表以生成3个新列表,但如果列表很长则不会效率低吗?

2 个答案:

答案 0 :(得分:2)

更好的是,使用in

Node.objects.filter(status__in=['a', 'p', 'h'])

评论后编辑不知道为什么效率低下。也许一个改进是添加.order_by('status'),以便获得有序的查询集,然后在迭代时拆分。可能是微观优化。

答案 1 :(得分:1)

看看Django Q对象

from django.db.models import Q;

Node.objects.filter(Q(status = 'a') | Q(status = 'p' | Q(status = 'h'))

来源: https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects