我有:
active = Node.objects.filter(status = 'a')
potential = Node.objects.filter(status = 'p')
hotspot = Node.objects.filter(status = 'h')
我想知道:是否有可能以更好的方式做到这一点?
编辑:也许我没有很好地解释自己。我需要有3个不同状态的列表。如果我只进行1次查询,那么我将不得不循环遍历列表以生成3个新列表,但如果列表很长则不会效率低吗?答案 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