Tipe data untuk postgres di Django memetakan ke string literal timestamp with time zone
, dan sepertinya tidak ada opsi untuk mengubah jenis itu.
Sejauh yang saya ketahui, Anda memiliki tiga opsi:
-
Manfaatkan hook Django untuk mengeksekusi raw sql setelah pernyataan buat tabel . Untuk melakukan ini, buat direktori bernama
sql
di aplikasi Anda dan file di direktori itu bernamamymodel.postgres_psycopg2.sql
. Tempatkan pernyataan tabel alter Anda di sana. -
Tulis bidang khusus untuk menentukan pengubah bidang stempel waktu sesuai keinginan Anda. Lihat "menulis bidang model khusus ".
-
Biarkan bidang django apa adanya, dan lakukan konversi zona waktu dalam aplikasi Anda sehingga Anda benar-benar yakin Anda melewati waktu yang tepat.
Preferensi pribadi saya untuk integritas data adalah #3. Sama seperti pengkodean karakter, di mana Anda selalu ingin memastikan bahwa Anda mengetahui rangkaian karakter dan menangani konversi dengan benar, saya merasa jauh lebih nyaman dengan tanggal/waktu yang atributnya (termasuk TZ) didefinisikan sejelas mungkin. Anda mungkin yakin hari ini bahwa semua masukan Anda sudah masuk ke aplikasi Anda dalam UTC, tetapi itu mungkin berubah, khususnya jika stempel waktu diberikan oleh pengguna akhir. Untuk apa nilainya, saya akan bekerja ekstra, mengonversi stempel waktu di aplikasi ke UTC, dan menyimpannya di DB dengan UTC sebagai zona waktu.