[Django]warnings.warn(“DateTimeField %s received a naive datetime (%s)”の対処法

記事内に広告が含まれています。

DjangoでDateTimeField を使った際の警告の解消法についてメモします。

発生した場面

Djangoのmodels.pyにて、日時をデフォルト値として登録する際に発生しました。

#models.py
import datetime
from django.db import models
#略
class TestTimeModel(models.Model):
    time = models.DateTimeField(
        default=datetime.datetime.now
    )

このデータベースを登録しようとすると、以下の警告が表示されました。

$python manage.py shell         

>>> from app.models import TestTimeModel
>>> b = TestTimeModel()
>>> b.save()
...warnings.warn("DateTimeField %s received a naive datetime (%s)"

ちなみに、データベースへの登録自体はできていました。

警告表示の消し方

timezone.now を使うと警告が表示されずにデータベース登録ができました。

from django.utils import timezone #<-新規追加
class TestTimeModel(models.Model):
    time = models.DateTimeField(
        default=timezone.now       #<-変更
)

django shell にて登録してみると、エラーが表示されません。

$python manage.py shell

>>> from app.models import timeModel
>>> b = timeModel()
>>> b.save()
>>>

まとめ

djangoでデータベースに現在時刻を登録する際の、警告を出さない方法について解決できる方法をまとめました。

何か役に立てば幸いです。

コメント