Значение по умолчанию DateTimeField для южной миграции в проекте Django с активированной поддержкой часового пояса

Я создаю миграцию схемы с South 0.7.6 для моего проекта Django 1.4.3 с включенной поддержкой часовых поясов.

Миграция схемы включает в себя добавление DateTimeFieldauto_now=True) на одном столе.

При создании миграции Юг подсказывает мне:

The field 'MyTable.my_field' does not have a default specified, yet is NOT NULL.
Since you are adding this field, you MUST specify a default
value to use for existing rows. Would you like to:
 1. Quit now, and add a default to the field in models.py
 2. Specify a one-off value to use for existing columns now

Какое правильное одноразовое значение можно указать здесь, если мне не нужно это значение для существующих строк (я просто хочу, чтобы миграция прошла без предупреждений)?

До сих пор я использовал datetime.datetime.utcnow(), Однако при применении миграции я получаю следующее:

C:\Python27\lib\site-packages\django\db\models\fields\__init__.py:808:
RuntimeWarning: DateTimeField received a naive datetime (2013-01-16 00:00:00)
while time zone support is active.

Юг, похоже, не импортирует классы Pytz или Django, так как я могу указать здесь значение по умолчанию для часового пояса?

3 ответа

Решение

Вручную отредактируйте файл миграции, созданный South, и добавьте:

from django.utils import timezone

Затем найдите поле, которое вы добавляете в файл миграции, и установите его default в timezone.now(),

pytz может быть использован для создания объектов datetime с учетом часового пояса. вы можете использовать следующее в вашем файле миграции:

import pytz
cn_tz = pytz.timezone('Asia/Shanghai')

тогда в твоей модели

self.gf('django.db.models.fields.DateTimeField')(auto_now=True, default=datetime.datetime.now(cn_tz), blank=True),

Я заметил, что когда я запускал миграции на dev-машине, это отличалось от того, когда я запускал их на производстве.

Моя машинка наверху файла имеет

    from south_utils import datetime_utils as datetime

где на производстве это генерируется

    import datetime

Заменив последний на первый, он решил мою проблему без дополнительных изменений в файле миграции.

Другие вопросы по тегам