Чтобы справиться с ошибкой, упомянутой Брэндоном, вы можете попробовать закрыть и снова открыть свой контроллер модального вида, если у вас все еще есть ссылка на него.
[textField resignFirstResponder];
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:yourModalViewControllerReference animated:NO];
(где «self» - это контроллер, который вы использовали для первоначального открытия контроллера модального вида)
Вместо этого вы можете фильтровать в python, используя механизмы базы данных:
for e in Entry.objects.all():
if i.entered.hour>= 9 and i.entered.hour < 17 :# or break down to minutes/seconds
list.append(e)
но оба решения уродливы, я думаю.
Стив, вы должны решить, что для вас менее уродливо:
Я не верю, что для этого есть встроенная поддержка, но вы можете передать дополнительные параметры where-clause (предупреждение: здесь есть возможность ввести поведение, зависящее от БД ).
Например, в Postgres, что-то вроде:
Entry.objects.extra(where=['EXTRACT(hour from entered) >= 12 and '\
'EXTRACT(hour from entered) < 17'])
Если вы используете потенциально небезопасный ввод для определения значений 12
и 17
, обратите внимание, что вы также можете укажите параметр params для extra, который обеспечит правильное цитирование и экранирование, а затем используйте стандартные заполнители sql % s
в своем операторе where.
Предоставили ли вы объекты datetime для start_time
и end_time
?
Быстрая проверка:
class Entry(models.Model):
entered = models.DateTimeField()
>>> from datetime import datetime
>>> Entry(entered = datetime.now()).save()
>>> Entry.objects.filter(entered__lte = datetime.now())
[<Entry: Entry object>]
>>> Entry.objects.filter(entered__gte = datetime.now())
[]
>>> Entry.objects.filter(entered__gte = datetime.now(), entered__lte=datetime(2009,11,1,0,0))
[<Entry: Entry object>]
Используя SQLite в качестве примера, относительно чистым и общим решением будет следующее:
Entry.objects.extra(where=["time(entered) between '%s' and '%s'"],
params=[start_time.strftime("%H:%M"), end_time.strftime("%H:%M")])