2013-07-16 4 views
1

Я изменил весь мой код, чтобы использовать aware-time с помощью django.utils.timezone.now() я изменил DateTimeField использовать default=timezone.now и установить USE_TZ=True в settings.pyДжанго юга миграции и USE_TZ = True

После изменения, я побежал на юг schemamigration и он не выбирает изменения полей базы данных.

Я использую юг 0.7.6 и postgresql, если это имеет значение.

Вот подробное изменение, которое я сделал, чтобы информировать весь свой часовой пояс о вашем сайте.
how do I make my site timezone aware?

+0

Дубликат http://stackoverflow.com/questions/10994101/django-1-4-use-tz-migration-database-part-best-practices – Bryce

ответ

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 так же, как и в вашем основном коде (что делает их часовыми поясами осведомленными или устраняет конкретную дату по умолчанию, не относящуюся к часовому поясу).

В качестве альтернативы вы можете попробовать reset your south migration history.

0

Опираясь на ответ Брюса, эти Баш скрипты, которые мы использовали, чтобы преобразовать наши южные миграции в часовом поясе, известно:

$ 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.»

Смежные вопросы