我有一些项目在某些时间段是可以预订的。网球场。因此,每个项目都有一些相关的可用性槽位,每个槽位由begintime和endtime定义。Begintime和endtime被定义为datetime对象,因此09.00-11.30之间的可用时隙存储为例如2013-12-13 09.00(Begintime)到2013-12-13 11.30(endtime)。在
当接到预订请求时,我需要确定网球场是否在所需的时间段内可用。在
因此,我尝试根据开始时间和结束时间筛选可用性时段,我的查询如下所示:
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)
但是我得到了以下错误
^{pr2}$因为我试图同时过滤begin和end属性。在
根据输入和来自主题Inequality Filter in AppEngine Datastore和BadFilterError: invalid filter: Only one property per query may have inequality filters (<=, >=, <, >)的其他帖子,我当前的解决方案是首先在begin上过滤:
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)
但这是实现我想要的最好的方法吗?在
我正在使用谷歌应用引擎和Python
感谢任何帮助
谢谢 托马斯
我有一个类似的要求:从数据存储区中选择应该立即呈现/交付的实体。由于数据存储无法处理此问题,因此需要应用程序逻辑。我对满足约束两端的键进行两个单独的查询,然后取它们的交集:
“begin”和“end”的交集是键
^{pr2}$k4, k5
。在然后迭代这些键,得到我需要的实体:
或者:
你问的有点不清楚。你是否理解这个问题还不清楚:你试图使用两个不等式过滤器,但这是不允许的。做不到。在
您必须解决这个数据存储限制。在
最基本的选择就是你自己用暴力来强迫它。使用一个过滤器,自己手动过滤出结果。这可能有助于对
begin
进行筛选,并对end
进行排序,但您必须仔细检查结果并选择所需的实际实体。在在大多数情况下,您需要重新构造数据,这样就不需要两个不等式过滤器。这可能是可能的,也可能是不可能的。在
我想猜猜你在做什么,但如果你想根据日历判断某人在上午11点是否很忙,一种方法是:
正如我想您已经知道的,您不能在使用数据存储的不等式过滤器中使用多个变量。除非你真的需要,你可以只使用“开始”时间进行过滤,仍然可以得到相当准确的结果。在
如果您确实需要,使用应用程序逻辑,您只能显示不超过“end”值的项。我什么也看不到。在
相关问题 更多 >
编程相关推荐