我想时区管理是被添加到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.
我想出了两个解决方案来解决这个问题。
USE_TZ = False
但这并不总是可取的。2.改变
date_generated = models.DateTimeField(auto_now_add = True)
至
date_generated = models.DateTimeField(default=datetime.now())
是保持时区管理正常工作的解决方案
发布于 2015-09-05 17:33:19
使用django的时区工具
from django.utils import timezone
date_generated = models.DateTimeField(default=timezone.now)
发布于 2012-06-29 22:31:30
问题出在你这一端:datetime.now()
不知道TZ,所以你是那个给一个天真的TZ喂食的人。请参阅Django docs on this issue。当设置default=datetime.now
时,它起作用的原因是您强制将值设置为一个朴素的日期时间,所以当您稍后将其与另一个朴素的日期时间进行比较时,没有问题。
你需要通过以下方式获取"now“:
import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
发布于 2013-10-22 01:45:33
请注意将DateTimeField
的默认值设置为datetime.now()
,因为当Apache/nginx加载Django时(或启动开发服务器时),它将计算单个值,并且所有后续记录都将接收该值。
因此,请始终使用auto_now_add
。
https://stackoverflow.com/questions/11262828
复制相似问题