Фильтры неравенства во времени на движке приложения ListProperty завершаются ошибкой при соединении - PullRequest
1 голос
/ 06 марта 2012

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

1 голос
/ 09 марта 2012

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

Doh.

1 голос
/ 07 марта 2012

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

...