7

タイムゾーンのサポートが有効になっている Django 1.4.3 プロジェクト用に、South 0.7.6 でスキーマの移行を作成しています。

スキーマの移行には、1 つのテーブルにDateTimeField(with ) を追加することが含まれます。auto_now=True

移行を作成するとき、South から次のように求められます。

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

既存の行のこの値を気にしない場合 (警告なしで移行を成功させたいだけです)、ここで指定する正しい 1 回限りの値は何ですか?

これまでは、 を使用してい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.

South は pytz や Django ヘルパー クラスをインポートしていないようですが、ここでタイムゾーン対応のデフォルト値を指定するにはどうすればよいですか?

4

3 に答える 3

6

South が作成した移行ファイルを手動で編集して追加します。

from django.utils import timezone

次に、移行ファイルに追加するフィールドを見つけて、に設定しdefaultますtimezone.now()

于 2013-01-16T16:11:20.917 に答える
0

pytz は、タイムゾーン対応の日時オブジェクトを作成するために使用できます。移行ファイルで次を使用できます。

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),
于 2013-11-01T03:07:48.753 に答える