django:查询具有特定范围的小时的对象

时间:2015-08-10 16:18:40

标签: python django datetime django-queryset

我想在一定的时间范围内(例如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)

2 个答案:

答案 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)