【发布时间】:2014-01-01 08:24:00
【问题描述】:
我有一些可以在特定时间段预订的项目。例如。一个网球场。因此,每个项目都有许多相关的可用性时段,每个时段由 begintime 和 endtime 定义。开始时间和结束时间被定义为日期时间对象,因此从 09.00 到 11.30 的可用性时段存储为例如。 2013-12-13 09.00(开始时间)至 2013-12-13 11.30(结束时间)。
收到预订请求时,我需要确定网球场是否在所需时间段可用。
所以我试图根据开始时间和结束时间过滤可用性时段,我的查询如下所示:
desired_availability_start = datetime(2013, 12, 13, 9,0,0)
desired_availability_end = datetime(2013, 12, 13, 10,0,0)
availability_slots = self.availability_slots.filter("begin <= ", desired_availability_start).filter("end >= ", desired_availability_end).fetch(limit=10)
但我收到以下错误
invalid filter: Only one property per query may have inequality filters (>=, <=, >, <)
因为我试图过滤 begin- 和 end- 属性。
根据输入和关于主题Inequality Filter in AppEngine Datastore 和BadFilterError: invalid filter: Only one property per query may have inequality filters (<=, >=, <, >) 的其他一些帖子,我目前的解决方案是首先过滤开始:
filtered_availability_slots = self.availability_slots.filter("begin <= ", desired_availability_start).fetch(limit=10)
然后过滤结束并将过滤后的项目附加到列表中:
final_availability_slots = []
for availability in filtered_availability_slots:
if availability.end >= desired_availability_end:
final_avaialability_slotes.append(availability)
但这是实现我想要实现的目标的最佳方式吗?
我正在使用 Google App Engine 和 Python
感谢任何帮助
谢谢 托马斯
【问题讨论】:
-
搜索 API 可能是一个替代方案,它与查询没有相同的限制。
标签: python google-app-engine python-2.7 google-cloud-datastore