【问题标题】:django south migration and USE_TZ=Truedjango 南迁移和 USE_TZ=True
【发布时间】:2013-07-16 03:28:07
【问题描述】:
我已通过使用 django.utils.timezone.now() 将所有代码更改为使用 aware-time
我将 datetimefield 更改为使用default=timezone.now,并在 settings.py 中设置USE_TZ=True
更改后,我运行了 south schemamigration 命令,但它没有获取数据库字段更改。
如果这很重要,我正在使用南 0.7.6 和 postgresql。
这是我为让我的整个网站时区感知所做的详细更改。
how do I make my site timezone aware?
【问题讨论】:
标签:
django
timezone
django-south
【解决方案1】:
如果您使用 south,并将 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 字段(使它们知道时区,或消除特定的非时区默认日期)。
您也可以尝试reset your south migration history。
【解决方案2】:
基于 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”。