2015-06-08 2 views
6

У меня есть DateField в 1,8 модели Django, что-то вроде:Как использовать DateField в форме Django с учетом времени?

from django.db import models 
birth_date = models.DateField() 

Когда он идет на форму, я вернусь к «наивным» объект:

birth_date = the_form.cleaned_data['birth_date'] 

печати birth_date в отладчике :

ipdb> birth_date 
datetime.date(2015, 6, 7) 

Затем, когда эта вещь будет сохранена в базу данных, я получаю предупреждение, как документация обещания:

RuntimeWarning: SQLite received a naive datetime (2015-06-08 01:08:21.470719) while time zone support is active. 

Я читал somearticles об этом, и я все еще смущен. Что мне делать с этой датой?

Должен ли я преобразовать его в DateTime, сделать его часовым поясом, а затем вернуться к дате? Должен ли я сделать модель DateTimeField и отказаться от DateFields? Каковы лучшие практики здесь?

ответ

0

Я думаю, что вы можете попытаться использовать make_aware для преобразования даты в формат. Из make_aware DJANGO документации:

make_aware (значение, часовой пояс = нет, is_dst = None)

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

Это должно исправить предупреждение:

from django.utils import timezone 

birth_date = timezone.make_aware(the_form.cleaned_data['birth_date'], timezone.get_default_timezone()) 
0

@ ответ Кало не работала для меня, поэтому я создал эту функцию полезности от того, что в конечном итоге работает для меня на основе его ответа:

from django.utils import timezone 
from django.utils.dateparse import parse_date 
from django.utils.datetime_safe import time 


def make_timezone_aware(date): 
    return timezone.make_aware(timezone.datetime.combine(parse_date(date), time.min)) 

Объединяя дату с 00:00 время solved the following errors:

  • 'datetime.date' объект не имеет атрибута 'tzinfo' объект
  • '' STR не имеет атрибута 'tzinfo'