komoto / エンジニアブログ

プログラミングについてアウトプットします。

【django】models.DateTimeFieldに現在の時刻(timezone.now)を格納するときデータベース内の値が現在時刻にならない問題

models.DateTimeFieldに現在の時刻(timezone.now)を格納するときデータベース内の値が現在時刻にならない問題の解決に1時間くらい費やしました。
なので、その解決法?について残しておきます。

models.DateTimeFieldに現在の時刻を入れたい場合は下の記事を参考にしてみてください。

sleepless-se.net

結論

データベース内の値は、現在時刻になっている必要はないみたいですね。(UTCになっているから)
そして、表示するときにTIME_ZONEで設定した地域の時刻に自動的に変換されるようです。

では、いつ変換されるのか

  • テンプレートファイル(htmlファイルなど)に渡して表示するとき
  • views.pyでtimezone.localtime(timezone.now())したとき

時刻を表示したいだけならば特に何もしなくても自動的に表示されるので楽ちんです。

ただ、「ブログとかで書いた記事を指定した時刻に投稿したい」とか時間指定で何かするものであるなら、views.pyであらかじめtimezone.localtime(timezone.now())で変換して、その変換した値をデータベースに格納する必要があります。(そうしないと9時間遅れて投稿されます)