Как я фильтрую ко времени в поле времени даты?

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

[textField resignFirstResponder];
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:yourModalViewControllerReference animated:NO];

(где «self» - это контроллер, который вы использовали для первоначального открытия контроллера модального вида)

7
задан Paolo Bergantino 27 May 2009 в 21:04
поделиться

4 ответа

Вместо этого вы можете фильтровать в 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)

но оба решения уродливы, я думаю.

Стив, вы должны решить, что для вас менее уродливо:

  • обработка большого количества данных в цикле for,
  • или использование .extra (..) и обход системы orm
1
ответ дан 7 December 2019 в 05:30
поделиться

Я не верю, что для этого есть встроенная поддержка, но вы можете передать дополнительные параметры 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.

6
ответ дан 7 December 2019 в 05:30
поделиться

Предоставили ли вы объекты 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>]
0
ответ дан 7 December 2019 в 05:30
поделиться

Используя SQLite в качестве примера, относительно чистым и общим решением будет следующее:

Entry.objects.extra(where=["time(entered) between '%s' and '%s'"],
                    params=[start_time.strftime("%H:%M"), end_time.strftime("%H:%M")])
3
ответ дан 7 December 2019 в 05:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: