Djangoのmodels.pyの「RuntimeWarning: DateTimeField received a naive datetime while time zone support is active.」の対応

Djangoで構築中のBitMEX用自動売買プログラムですが、テスト実行の際に「RuntimeWarning」が出てたので、その対応方法メモです。

前回の記事で、models.pyの設定を行いました。

Djangoで発生したRuntimeWarningの内容

発生していたメッセージは以下です。

RuntimeWarning: DateTimeField Bitmexmanage.created_at received a naive datetime (2019-05-20 23:53:45.374256) while time zone support is active.

対象の項目は次の通りです。

created_at = models.DateTimeField(default=datetime.now)

RuntimeWarningが発生した原因と対応方法

RuntimeWarningが発生した原因は、datetimeにタイムゾーンが設定されていなかったことでした。

対応方法は、まずmodels.pyに以下を追加します。

from django.utils import timezone

そしてcreated_atの項目を以下のように書き替えます。

created_at = models.DateTimeField(default=timezone.now)

datetime.nowとしていたところを、timezone.nowとします。