我想在一定的时间范围内(例如9到12)选择数据库中的所有对象。现在,我这样做:
my_range = range(9,12)
excluded_range = [x for x in range(24) if not x in my_range]
selected_objects = MyModel.objects.all()
for hour in excluded_range:
selected_objects = selected_objects.exclude(datetimefield__hour=hour)
有没有办法只使用查询? (使用django 1.7)
答案 0 :(得分:0)
修改强>
您的方法将在for循环中的每次迭代中命中数据库
考虑使用以下
from django.db.models import Q
queries = [Q(datetimefield__hour=hour) for hour in range(9, 12)]
query = queries.pop()
for _query in queries:
query |= _query
selected_objects = MyModel.objects.filter(query)
答案 1 :(得分:0)
可以使用reduce
使用以下单行完成此操作my_range = range(9, 12)
query = reduce(lambda x, y: x | y, Q(field__hour=h) for h in my_range)
selected_objects = Model.objects.filter(query)