Фильтры неравенства во времени на движке приложения ListProperty завершаются с ошибкой

У меня есть 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())

Этот последний запрос является желаемым результатом, но время должно быть текущим временем с произвольными минутами.

WTF?!

2 ответа

Решение

Виноват. Я сделал предположение, что движок приложения работает со свойствами списка, такими как mongodb. Если к свойству списка применяются два фильтра неравенства, одно значение в списке должно совпадать с обоими. Успешные результаты на отметках 00 и 30 минут, где артефакты использования>=, <=, где одно значение совпадает с обоими.

Doh.

Этот код вы даете именно то , что вы пытались? Обратите внимание, что хранилище данных не любит фильтры диапазона, которые указывают пустой диапазон, и не возвращает результатов в этом случае - так что если, например, вы действительно запустили что-то вроде q.filter ('a <', t).filter ('a> = ', т) что бы объяснить ваши результаты.

Другие вопросы по тегам