私はDjangoアプリケーションに取り組んでおり、postgresで表されるすべての日時フィールドをUTCで保存する必要があります(必要に応じて)。DateTimeフィールドを使用してモデルを作成している場合、データベース表現は「タイムゾーン付きのタイムスタンプ」として生成されます。テーブルを手動で変更してフィールドからタイムゾーンを削除することはできますが、DateTimeモデルフィールドにそれを実行できない機能があるかどうか、つまり、一部のフィールドに「タイムゾーンのないタイムスタンプ」を作成する機能があるかどうか疑問に思いました。それは可能ですか?または、それらのテーブルを変更する必要がありますか?ありがとう、ハレル
1 に答える
Djangoのpostgresのデータ型は文字列リテラルにマップされておりtimestamp with time zone
、その型を変更するオプションはないようです。
私の知る限り、次の3つのオプションがあります。
createtableステートメントの後にrawsqlを実行するために、Djangoのフックを利用します。これを行う
sql
には、アプリで呼び出されるディレクトリと、そのディレクトリにと呼ばれるファイルを作成しますmymodel.postgres_psycopg2.sql
。そこにaltertableステートメントを配置します。カスタムフィールドを作成して、適切と思われるタイムスタンプフィールドの修飾子を定義します。「カスタムモデルフィールドの作成」を参照してください。
djangoフィールドはそのままにして、アプリケーションでタイムゾーン変換を実行し、正しい時刻を確実に通過できるようにします。
私の個人的なデータ整合性の好みは#3です。文字セットを常に理解し、変換を適切に処理していることを常に確認したい文字エンコードの場合と同様に、属性(TZを含む)が可能な限り正確に定義されている日付/時刻の方がはるかに快適です。今日、すべての入力がすでにUTCでアプリに送信されていることは確かかもしれませんが、特にタイムスタンプがエンドユーザーによって提供されている場合は、変更される可能性があります。その価値については、さらに一歩進んで、アプリのタイムスタンプをUTCに変換し、UTCをタイムゾーンとしてDBに保存します。