RuntimeWarning: DateTimeField recibió una fecha y hora ingenua
Estoy intentando enviar un correo sencillo utilizando IPython. No he configurado ningún modelo y todavía aparece este error. ¿Qué se puede hacer?
Error: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py:827: RuntimeWarning: DateTimeField recibió una fecha y hora ingenua (2013-09-04 14:14:13.698105) mientras el soporte de zona horaria está activo. Advertencia de tiempo de ejecución)
Probado: el primer paso es agregarlo USE_TZ = True
a su archivo de configuración e instalarlo.pytz
(si es posible).
Error cambiado:
(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)
El problema no está en la configuración de Django, sino en la fecha pasada al modelo. Así es como se ve un objeto que reconoce la zona horaria:
>>> from django.utils import timezone
>>> import pytz
>>> timezone.now()
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
Y aquí hay un objeto ingenuo:
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2013, 11, 20, 20, 9, 26, 423063)
Entonces, si está pasando la fecha del correo electrónico en cualquier lugar (y eventualmente llega a algún modelo), simplemente use el archivo now()
. De lo contrario, probablemente sea un problema con un paquete existente que obtiene la fecha sin zona horaria y puede parchear el paquete, ignorar la advertencia o configurar USE_TZ en False.
Utilice la función django.utils.timezone.make_aware para que sus ingenuos objetos de fecha y hora tengan en cuenta la zona horaria y evite esas advertencias.
Convierte un objeto ingenuo de fecha y hora (sin información de zona horaria) en uno que tiene información de zona horaria (usando la zona horaria especificada en la configuración de Django si no la especifica explícitamente como segundo argumento):
import datetime
from django.conf import settings
from django.utils.timezone import make_aware
naive_datetime = datetime.datetime.now()
naive_datetime.tzinfo # None
settings.TIME_ZONE # 'UTC'
aware_datetime = make_aware(naive_datetime)
aware_datetime.tzinfo # <UTC>
Solo para corregir el error al configurar la hora actual.
from django.utils import timezone
import datetime
datetime.datetime.now(tz=timezone.utc) # you can use this value
asegúrese de que settings.py tenga
USE_TZ = True
En su archivo de Python:
from django.utils import timezone
timezone.now() # use its value in model field