首页 文章

RuntimeWarning:DateTimeField收到一个天真的日期时间

提问于
浏览
211

我试图使用IPython发送一个简单的邮件 . 我还没有设置任何模型仍然出现此错误 . 可以做些什么?

错误:/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/init.py:827:RuntimeWarning:DateTimeField收到一个天真的日期时间(2013-09- 04 14:14:13.698105)虽然时区支持有效 . RuntimeWarning)

尝试:第一步是将 USE_TZ = True 添加到您的设置文件并安装 pytz (如果可能) .

错误已更改:

(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)

3 回答

  • 6

    问题不在Django设置中,而是在传递给模型的_749002中 . 以下是时区感知对象的外观:

    >>> from django.utils import timezone
    >>> import pytz
    >>> timezone.now()
    datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
    

    这是一个天真的对象:

    >>> from datetime import datetime
    >>> datetime.now()
    datetime.datetime(2013, 11, 20, 20, 9, 26, 423063)
    

    因此,如果您在任何地方传递电子邮件日期(并最终获得某些模型),请使用Django的 now() . 如果没有,那么现有的包可能是一个问题,它在没有时区的情况下获取日期,您可以修改包,忽略警告或将USE_TZ设置为False .

  • 17

    使用django.utils.timezone.make_aware函数可以使您的天真日期时间对象感知时区并避免这些警告 .

    它将天真的日期时间对象(没有时区信息)转换为具有时区信息的对象(使用django设置中指定的时区,如果未将其明确指定为第二个参数):

    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>
    
  • 366

    只是为了修复错误来设置当前时间

    from django.utils import timezone
    import datetime
    
    datetime.datetime.now(tz=timezone.utc) # you can use this value
    

相关问题