RuntimeWarning: DateTimeField recibió una fecha y hora ingenua

Resuelto shifu asked hace 11 años • 12 respuestas

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 = Truea 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)
shifu avatar Sep 05 '13 02:09 shifu
Aceptado

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.

kravietz avatar Nov 20 '2013 20:11 kravietz

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>
dmrz avatar Jul 13 '2017 12:07 dmrz

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
Sachin G. avatar Mar 06 '2018 10:03 Sachin G.

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

Jay Soni avatar Aug 23 '2020 10:08 Jay Soni