1

我在一个实体中有 ListProperty,它包含两个时间对象,这些时间对象代表一周中某天的营业时间和关闭时间:

mon_hours = db.ListProperty(datetime.time)
tue_hours = db.ListProperty(datetime.time)
wed_hours = db.ListProperty(datetime.time)
thu_hours = db.ListProperty(datetime.time)
fri_hours = db.ListProperty(datetime.time)
sat_hours = db.ListProperty(datetime.time)
sun_hours = db.ListProperty(datetime.time)

当我使用当前时间查询此实体并链接过滤器以正确返回列表时间大于和小于的记录时,它会失败并显示 0 个结果:

now = datetime.datetime.now()
q = Place.all()           
q.filter('mon_hours <=', now.time()).filter('mon_hours' >=', now.time())

但是,当我删除其中一个过滤器时,它会返回结果,但会出现错误的结果:

now = datetime.datetime.now()
q = Place.all()           
q.filter('mon_hours <=', now.time())

当我手动将分钟设置为 00 时,它出于某种原因起作用:

q = Place.all()           
q.filter('mon_hours <=', datetime.datetime(1970,1,1,10,00).time()).filter('mon_hours' >=', datetime.datetime(1970,1,1,10,00).time())

最后一个查询是所需的结果,但时间需要是当前时间和任意分钟。

怎么回事?!

4

2 回答 2

1

您给出的代码是否与您尝试过的完全一致?请注意,数据存储不喜欢指示空范围的范围过滤器,并且在这种情况下不返回任何结果 - 因此,如果您实际上运行了类似 q.filter('a <', t).filter('a > =', t) 这可以解释你的结果。

于 2012-03-07T03:30:18.693 回答
1

我的错。我假设应用引擎可以处理像 mongodb 这样的列表属性。如果将两个不等式过滤器应用于列表属性,则列表中的一个值必须同时匹配两者。00 分钟和 30 分钟的成功结果标志着使用 >=、<= 的伪影,其中一个值同时匹配两者。

多哈。

于 2012-03-09T17:12:01.013 回答