Django поле даты и время до даты Python - PullRequest
7 голосов
/ 31 марта 2012

У меня есть модель Django с отдельным полем даты и временем для события.Есть ли способ преобразовать его в объект даты и времени Python, чтобы я мог с определенной точностью запрашивать предстоящие события?В настоящее время я получаю только предстоящий следующий день.

models.py

event_time = models.TimeField()
event_date = models.DateField()

В основном, я могу фильтровать с точностью до минуты или даже доли секунды?Спасибо.

Ответы [ 2 ]

10 голосов
/ 31 марта 2012

Вместо этого используйте DateTimeField (см. в этом разделе в документации). Преобразование в datetime.datetime для вас обрабатывается Django автоматически.

A DateField приводит к объекту datetime.date и datetime.time. Вы можете использовать replace для объединения этих значений в обновленное date:

>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2012, 3, 31, 11, 6, 5, 182371)
>>> time = datetime.time(11, 30)
>>> today.replace(hour=time.hour, minute=time.minute)
datetime.datetime(2012, 3, 31, 11, 30, 5, 182371)

Обратите внимание, что полученное значение date теперь равно 11.30. Также обратите внимание, что today не изменяется, он просто вычисляет новую дату и время. Как видите, теперь вы должны выполнить слияние самостоятельно, поскольку оба значения хранятся в отдельных полях. Вот почему DateTimeField гораздо лучший выбор, если у вас есть возможность изменять поля модели.

5 голосов
/ 31 марта 2012

Вы должны добавить новое поле, как поле даты и времени слияния.Лучше для производительности.

event_full_datetime = models.DateTimeField()

исправить старую базу данных.для оболочки, как этот скрипт.

for obj in YourModel.objects.all():
    obj.event_full_datetime = datetime.datetime( obj.event_date.year,obj.event_date.month, obj.event_date.day, obj.event_time.hour,  obj.event_time.minut,  obj.event_time.second) 
    obj.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...