這是一個跟時區有關的問題,報錯中說到datetime字段獲得一個naive datetime,而不是支持time zone的active datetime
因爲Django的設置中米哦人USE_TZ設置爲True,Django會自動根據所設的時區對時間進行轉換,因此程序中和數據保存的時間都轉UTC時間,只有模版渲染時會把時間轉爲TIME_ZONE所設置的時區的時間。django
使用datetime.datetime.utcnow()輸出的是不帶時區的utc時間,稱爲naive timespa
rom datetime import datetime datetime.now() datetime.datetime(2016, 06, 19, 07, 14, 55, 865000)
使用django.utils.timezone.now()輸出的是帶時區的utc時間,稱爲active timecode
from django.utils import timezone timezone.now() datetime.datetime(2016, 06, 19, 07, 15, 48, 367000, tzinfo=<UTC>)
若是項目須要根據時區顯示時間,那就使用Django的timezone.now()。不須要的話將USE_TZ設置爲False便可。blog
使用帶時區的時間,將全部用到datetime.now()的地方改成timezone.now(),並在對應的文件頂部加上from django.utils import timezone,就OK了。class
若是項目中已經有了不少datetime.now(),又不想大面積改動的話,能夠將import的語句修改一下import
# from datetime import datetime # 原來用的註釋掉 from django.utils import timezone as datetime # 不想大面積修改就這麼作