QuerySets是延迟的,创建QuerySets不会触及到数据库操作,你可以多个过滤合并到一起,直到求值的时候django才会开始执行。
例如:
q = Apple.objects.all()
q = q.filter(status=0)
q = q.filter(start_time_gte=now)
print q
虽然看起来执行了三个过滤条件,实际上最后执行print q的时候,django才会执行数据库中SQL。
所以,尝试通过改变语句顺序的方式优化代码效率是没有效果的:
self_filter = {}
self_filter['status'] = 0
self_filter['start_time_gte'] = now
q = Apple.objects.filter(**self_filter)
两组语句执行时间一样。