我有一些可以在某些时段预订的商品。例如。一个网球场。因此,每个项目都有许多关联的可用时段,每个可用时段由开始时间和结束时间定义。开始时间和结束时间被定义为日期时间对象,因此从 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- 属性。
根据输入内容和有关该主题的其他一些帖子AppEngine 数据存储区中的不平等过滤器 https://stackoverflow.com/questions/10809273/inequality-filter-in-appengine-datastore and BadFilterError:过滤器无效:每个查询只能有一个属性具有不等式过滤器(=、) https://stackoverflow.com/questions/13391818/badfiltererror-invalid-filter-only-one-property-per-query-may-have-inequality我当前的解决方案是首先在开始时进行过滤:
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
任何帮助表示赞赏
谢谢
托马斯