2017-09-12 5 views
0

"created_at"と "updated_at"の2つのフィールドがあるモデル "Member"があります。もともと、それらは以下のように定義された :ローカルのdjangoにレコードの作成時刻と更新時刻が格納されていません

created_at = models.DateTimeField(auto_now_add=True, null=True) 
updated_at = models.DateTimeField(auto_now_add=True, null=True) 

私のsettings.pyは真USE_TZ =とTIME_ZONE = "アメリカ/ニューヨーク" を持っています。

ユーザーが選択したタイムゾーンを有効にするために定義されたカスタムミドルウェアがあります。私はメンバーのレコードを更新し、その代わりに、同じUTCタイムゾーンを示す、 updated_atの時間をチェックしたときに、今

created_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True) 
updated_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True) 

current_tz = pytz.timezone("<user defined timezone>") 
timezone.activate(current_tz) 

その後、私は、ユーザーのlocaltimeを格納するフィールドを更新しますユーザーのローカル時間。

は常にUTCでDBの日時値を格納するか、私はあなたのすべての要件がUSE_TZ = Trueに焦点を当てる必要があり、ここで

+0

このコードでは、ユーザーではなくサーバーのlocaltimeのみが使用されます。 –

+0

私は自分の質問を編集して、ユーザーが選択したタイムゾーンごとにタイムゾーンをアクティブにするためのミドルウェアについて言及しました。では、サーバーではなくユーザーのローカルタイムを使用する方法は? – user2722127

+1

十分に公正。しかし、これはまだ悪い考えのようです。なぜあなたは明示的に[docs](https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/)に推奨されているように、現地時間を保存したいのですか? - UTCの保存と出力時の変換? –

答えて

1

何かが足りないのですDjangoのそれをです。

USE_TZ = Trueを設定すると、DateTimeFieldにUTC時間が格納されます。 あなたのsettings.pyにUSE_TZ = Trueをコメントすると、あなたが望むものを手に入れることができます。

プロジェクトでは、オープンUSE_TZ、すべてのストアまたは内部処理偶数プリントがUTCタイムゾーンである場合は、常にUSE_TZを開いてください。テンプレートに表示すると、time format conversionにとっては非常に便利です。

関連する問題