Django时区如何与Model.field的AUTO_NOW_ADD一起工作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (111)

我想时区管理是添加到Django 1.4中的,所以这个问题很新。

我用了一个简单的模型

class Sample(models.Model):
    ...
    date_generated = models.DateTimeField(auto_now_add = True)

当我试图检索新创建的记录时,它会失败。

min_datetime = datetime.now() - timedelta(seconds = 300)
sample = Sample.objects.get(date_generated__gte = min_datetime)

服务器发出警告。

DateTimeField received a naive datetime (2012-06-29 15:02:15.074000) while time zone support is active.

我想出了两个解决这个问题的办法。

  1. 禁用setings.py中的时区管理
  2. 转换
提问于
用户回答回答于

使用Django的时区实用程序

from django.utils import timezone
date_generated = models.DateTimeField(default=timezone.now)
用户回答回答于

问题就在datetime.now()没有意识到,它在设置时工作的原因default=datetime.now就是将值强制转换为天真的日期时间,因此,当稍后将其与另一个日期时间进行比较时,就没有问题了。

你需要以以下方式得到“现在”:

import datetime
from django.utils.timezone import utc

now = datetime.datetime.utcnow().replace(tzinfo=utc)

扫码关注云+社区