django南迁和USE_TZ =真

时间:2013-07-16 03:28:07

标签: django timezone django-south

我已使用aware-time更改了我的所有代码以使用django.utils.timezone.now() 我更改了datetimefield以使用default=timezone.now,并在settings.py

中设置USE_TZ=True

更改后,我运行了南方schemamigration命令,它没有选择数据库字段更改。

如果重要的话,我正在使用南0.7.6和postgresql。

以下是我为了解整个网站时区所做的详细更改 how do I make my site timezone aware?

2 个答案:

答案 0 :(得分:0)

如果您使用南方,并将USE_TZ=False更改为USE_TZ=True,则所有旧迁移都可能会中断,您将收到以下错误:

RuntimeWarning: DateTimeField received a naive datetime (XXX)
while time zone support is active

我还没有找到在settings.py中进行南轨道更改的方法。我所做的是改变实际的迁移文件。这些都有一个数字,位于迁移子目录中。

对于每个失败的,添加from django.utils import timezone,并以与在主代码中相同的方式修改任何DateTimeField字段(使它们能够识别时区,或消除特定的非时区默认日期)。 / p>

或者,您可以尝试reset your south migration history

答案 1 :(得分:0)

基于Bryce的回答,这些是我们用于将南迁移转换为时区感知的bash脚本:

$ cd mysite/mainapp/migrations
$ find ./ -type f -exec sed -i -e 's/datetime.datetime.now/timezone.now/g' {} \;
$ find ./ -type f -exec sed -i -e '/import datetime/{G;s/$/from django.utils import timezone/;}' {} \;

用于OS X 10.11.5“El Capitan。”