django错误一则untimeWarning: DateTimeField received a naive datetime

发生此错误的情况

我想查询一个对象的集合的日期字段是7天之前
原来是这么写的

last_expired_datetime = datetime.datetime.now() - datetime.timedelta(settings.ACCOUNT_ACTIVATION_DAYS)

expired_users = User.objects.filter(Q(date_joined__lt=last_expired_datetime),
            Q(is_active=False))

运行测试的时候就会发出一个警告

...../Users/vincent/.virtualenvs/dj15/lib/python2.7/site-packages/django/db/models/fields/__init__.py:827: RuntimeWarning: DateTimeField received a naive datetime (2013-04-13 02:12:21.853095) while time zone support is active.
  RuntimeWarning)

意思就是我在model里的操作日期字段的时候使用了本地时间,而不是一个UTC时间.

# 激活日期范围之前的datetime
修改如下

        last_expired_datetime = datetime.datetime.utcnow().replace(tzinfo=utc) - datetime.timedelta(settings.ACCOUNT_ACTIVATION_DAYS)
        #print last_expired_datetime
        # 查询截止到目前 超过制定日期没有激活的用户
        expired_users = User.objects.filter(Q(date_joined__lt=last_expired_datetime),
            Q(is_active=False))

警告解除

参考链接
https://groups.google.com/forum/?fromgroups=#!topic/django-users/HTUJUIAkL1U

http://stackoverflow.com/questions/10034823/django-converting-old-datetime-field-to-new-1-4-datetime-with-time-zone-aware-in
https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/#code