2013-07-10 156 views
2

我想将DateTimeField添加到我的django模型中,并将最大时间戳作为默认值。我已经发现,Django中的最大时间戳是9999/12/31 23:59:59,与postgres DB中使用的最大时间戳不同。当使用此时间戳作为字段的默认值时,我得到一个OverflowError: date value out of range错误。因此,我尝试同样与9999/01/01 00:00:00像这样:Django时区感知DateTimeField默认值时区感知错误

start_time = models.DateTimeField(null=False, default=datetime.datetime(9999,01,01,00,00,00,tzinfo=utc))

现在,当我将此向南迁移到数据库中,我得到以下异常:

RuntimeWarning: DateTimeField received a naive datetime (9999-01-01 00:00:00) while time zone support is active.

查看数据库时,我看到我的本地时区已应用于默认值:9999-01-01 00:00:00+01这使我得出结论,即django忽略了时区意识,但我不知道为什么可能。

附加信息:

的Django TIME_ZONE设置为“欧洲/柏林

USE_TZ是真

任何帮助表示赞赏。

回答

4

尝试在日期时间中调用replace,而不是将tzinfo传入日期时间的__init__。取自django docs:

import datetime 
from django.utils.timezone import utc 

now = datetime.datetime(9999, 1, 1).replace(tzinfo=utc) 
+0

我以为我以前试过,但这实际上是做了tric。谢谢。 – Tim