Django:查询小时在一定范围内的对象

2024-04-20 08:37:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 对象in数据库forifobjectsmy时间
2条回答

编辑:
对于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)

这可以通过使用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)

相关问题 更多 >