我想用IPython发送一封简单的邮件。我没有建立任何模型仍然得到这个错误。我们能做些什么呢?

错误: /home/sourabh/ django/ learn/local/lib/python2.7/site-packages/django/db/models/fields/init.py:827: RuntimeWarning: DateTimeField received a naive datetime (2013-09-04 14:14:13.698105) while time zone support is active。 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)

当前回答

又快又脏-把它关掉:

USE_TZ = False

在你的settings.py中

其他回答

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

from django.utils import timezone
import datetime

datetime.datetime.now(tz=timezone.utc) # you can use this value

确保settings.py有 USE_TZ = True

在你的python文件中:

from django.utils import timezone

timezone.now() # use its value in model field

使用django.utils.timezone。Make_aware函数使您的天真datetime对象具有时区意识,并避免这些警告。

它将天真的datetime对象(没有timezone info)转换为有timezone info的对象(如果你没有显式地将timezone作为第二个参数,则使用django设置中指定的timezone):

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>

我在使用以下模型时遇到了这个警告。

from datetime import datetime

class MyObject(models.Model):
    my_date = models.DateTimeField(default=datetime.now)

为了解决这个问题,我切换到下面的默认设置。

from django.utils import timezone

class MyObject(models.Model):
    my_date = models.DateTimeField(default=timezone.now)

问题不在于Django的设置,而在于传递给模型的日期。下面是一个时区感知对象的样子:

>>> 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。