Estou tentando enviar um email simples usando o IPython. Eu não configurei nenhum modelo que ainda esteja recebendo esse erro. O que pode ser feito?
Erro: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py: 827: RuntimeWarning: DateTimeField recebeu um datetime ingênuo (2013-09-04 14: 14: 13.698105) enquanto o suporte ao fuso horário estiver ativo. RuntimeWarning)
Tentei: O primeiro passo é adicionar USE_TZ = True
ao seu arquivo de configurações e instalar pytz
(se possível).
Erro alterado:
(learn)sourabh@sL:~/Django/learn/event$ python manage.py shell
/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:53: RuntimeWarning: SQLite received a naive datetime (2013-09-05 00:59:32.181872) while time zone support is active.
RuntimeWarning)
fonte
tzinfo=<UTC>
, o que é<UTC>
? Essa não é uma construção sintática que eu tenha visto.datetime.now
, altere paratimezone.now
e adicionefrom django.utils import timezone
na parte superior.import pytz
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
USE_TZ = True
,TIME_ZONE = 'UTC'
. Mas quando eu uso,timezone.now()
ele não aparecetzinfo=<UTC>
.... Portanto, esse objeto datetime é passado como ingênuo. Por que isso acontece?Use a função django.utils.timezone.make_aware para tornar seus objetos ingênuos de data e hora fusos horários cientes e evitar esses avisos.
Ele converte um objeto de data e hora ingênuo (sem informações de fuso horário) para aquele que possui informações de fuso horário (usando o fuso horário especificado nas configurações do django se você não o especificar explicitamente como um segundo argumento):
fonte
auto_now
eauto_now_add
funcionará bem nos campos de data e hora. Se você precisar que o fuso horário atual reconheça o objeto de data e hora nos modelos por algum motivo - use adjango.utils.timezone.now()
funçãoApenas para corrigir o erro para definir a hora atual
fonte
É possível corrigir o aviso e usar o fuso horário especificado em settings.py, que pode ser diferente do UTC.
Por exemplo, em meu settings.py eu tenho:
Aqui está uma solução; a vantagem é que
str(mydate)
dá a hora correta:Outro método equivalente está usando
make_aware
, consulte dmrz post.fonte
Rápido e sujo - Desligue-o:
na tua
settings.py
fonte
Você também pode substituir as configurações, particularmente úteis nos testes:
Isso impedirá que você veja o aviso. Ao mesmo tempo, qualquer coisa no seu código que exija um fuso horário com reconhecimento de fuso horário pode causar problemas. Se for esse o caso, consulte a resposta kravietz.
fonte
Se você está tentando transformar um datetime ingênuo em um datetime com fuso horário no django, aqui está minha solução:
t1 é um datetime ingênuo e t2 é um datetime com fuso horário nas configurações do django.
fonte