Saya mencoba mengirim surat sederhana menggunakan IPython. Saya belum menyiapkan model apa pun yang masih mengalami kesalahan ini. Apa yang bisa dilakukan?
Kesalahan: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py: 827: RuntimeWarning: DateTimeField menerima datetime naif (2013-09-04 14: 14: 13.698105) ketika dukungan zona waktu aktif. RuntimeWarning)
Mencoba: Langkah pertama adalah menambahkan USE_TZ = True
ke file pengaturan Anda dan menginstal pytz
(jika mungkin).
Kesalahan berubah:
(learn)sourabh@sL:~/Django/learn/event$ python manage.py shell
/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:53: RuntimeWarning: SQLite received a naive datetime (2013-09-05 00:59:32.181872) while time zone support is active.
RuntimeWarning)
sumber
tzinfo=<UTC>
, apa itu<UTC>
? Itu bukan konstruksi sintaksis yang pernah saya lihat.datetime.now
, ubahtimezone.now
, dan tambahkanfrom django.utils import timezone
di bagian atas.import pytz
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
USE_TZ = True
,TIME_ZONE = 'UTC'
. Tetapi ketika saya menggunakannyatimezone.now()
tidak menunjukkantzinfo=<UTC>
.... Jadi objek datetime ini dilewatkan sebagai naif. Mengapa itu terjadi?Gunakan fungsi django.utils.timezone.make_aware untuk membuat zona waktu objek naif Anda sadar dan menghindari peringatan tersebut.
Ini mengubah objek datetime naif (tanpa info zona waktu) ke objek yang memiliki info zona waktu (menggunakan zona waktu yang ditentukan dalam pengaturan Django Anda jika Anda tidak menentukannya secara eksplisit sebagai argumen kedua):
sumber
auto_now
danauto_now_add
akan berfungsi dengan baik untuk bidang datetime. Jika Anda perlu memiliki zona waktu sadar objek datetime saat ini dalam model untuk beberapa alasan - gunakandjango.utils.timezone.now()
fungsi.Hanya untuk memperbaiki kesalahan untuk mengatur waktu saat ini
sumber
Seseorang dapat memperbaiki peringatan dan menggunakan zona waktu yang ditentukan dalam settings.py, yang mungkin berbeda dari UTC.
Sebagai contoh di settings.py saya saya punya:
Ini solusinya; Keuntungannya adalah
str(mydate)
memberikan waktu yang tepat:Metode lain yang setara adalah menggunakan
make_aware
, lihat posting dmrz.sumber
Cepat dan kotor - Matikan:
di Anda
settings.py
sumber
Anda juga dapat mengesampingkan pengaturan, terutama berguna dalam pengujian:
Ini akan mencegah Anda dari melihat peringatan, pada saat yang sama segala sesuatu dalam kode Anda yang memerlukan waktu sadar zona waktu dapat memberi Anda masalah. Jika ini masalahnya, lihat jawaban kravietz.
sumber
Jika Anda mencoba mengubah datetime naif menjadi datetime dengan zona waktu di Django, berikut adalah solusi saya:
t1 adalah datetime naif dan t2 adalah datetime dengan zona waktu di pengaturan Django.
sumber