Djangoでwarnings.warn(“DateTimeField %s received a naive datetime (%s)”
今回はDjangoのDateTimeFieldを使用しているときに、「while time zone support is active. warnings.warn(“DateTimeField %s received a naive datetime (%s)"」というエラーが起きたときの対処法についてご紹介いたします。
Djangoでwarnings.warn(“DateTimeField %s received a naive datetime (%s)"
簡単にいうと、awareなdatetimeを入れるべきところをnaiveなdatetimeを入れてしまっていることが原因です。(awareとnativeの違いについてはここでは省きます)
私はtimestampからdatetimeを変換してDateTimeFieldに入れようとしたら上記のwarningが出ました。
下記、私がwarningを出したサンプルコードです。
1 2 3 4 |
from django.db import models class SampleModel(models.Model): updated_at = models.DateTimeField(null=True) |
1 2 3 4 5 6 7 8 9 |
from datetime import datetime from samplemodel.models import SampleModel timestamp = 1337000000 sampleModel = SampleModel.objects.all() sampleModel[0].updated_at = datetime.fromtimestamp(timestamp) sampleModel[0].save() |
修正して、次のようにtimezoneを指定するとwarningが出なくなりました。
1 2 3 4 5 6 7 8 9 |
from datetime import datetime, timezone from samplemodel.models import SampleModel timestamp = 1337000000 sampleModel = SampleModel.objects.all() sampleModel[0].updated_at = datetime.fromtimestamp(timestamp, timezone.utc) sampleModel[0].save() |
終わりに
今回はDjangoのDateTimeFieldを使用しているときに、「while time zone support is active. warnings.warn(“DateTimeField %s received a naive datetime (%s)"」というエラーが起きたときの対処法についてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません