我有很多商品可以在特定时间段预订。例如。一个网球场。因此,每个项目都有许多关联的可用时段,每个可用时段由开始时间和结束时间定义。开始时间和结束时间被定义为日期时间对象,因此从 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 (>=, <=, >, <)
因为我试图过滤开始和结束属性。
基于输入和有关该主题的其他一些帖子 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
感谢任何帮助
谢谢 托马斯
最佳答案
正如我猜您已经知道的那样,您不能使用数据存储中的不等式过滤器使用多个变量。除非您确实需要,否则您可以仅使用“开始”时间进行过滤,并且仍然可以获得相当准确的结果。
calitem = self.appointments.filter("begin >= ", start).filter("begin <= ", end).fetch(limit=10)
如果您确实需要,使用您的应用程序逻辑,您只能显示不超出“最终”值的项目。我没有看到任何其他方法。
关于python - 无效过滤器 : Only one property per query may have inequality filters (>=, <=、>、<),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568673/