PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Champ Django DateTime pour générer des champs d'horodatage sans fuseau horaire

Les types de données pour postgres dans Django correspondent à la chaîne littérale timestamp with time zone , et il ne semble pas y avoir d'option pour modifier ce type.

Autant que je sache, vous avez trois options :

  1. Profitez du hook de Django pour exécuter raw sql après l'instruction create table . Pour ce faire, créez un répertoire appelé sql dans votre application et un fichier dans ce répertoire appelé mymodel.postgres_psycopg2.sql . Placez-y vos instructions alter table.

  2. Écrivez un champ personnalisé pour définir les modificateurs du champ d'horodatage comme bon vous semble. Voir "écrire des champs de modèle personnalisés ".

  3. Laissez le champ django tel quel et effectuez la conversion du fuseau horaire dans votre application afin d'être absolument certain que vous passez l'heure correcte.

Ma préférence personnelle pour l'intégrité des données est #3. Tout comme avec les encodages de caractères, où vous voulez toujours être sûr de connaître le jeu de caractères et de gérer correctement les conversions, je me sens beaucoup plus à l'aise avec les dates/heures dont les attributs (y compris TZ) sont définis aussi précisément que possible. Vous pouvez être certain aujourd'hui que toutes vos entrées arrivent déjà dans votre application en UTC, mais cela peut changer, en particulier si les horodatages sont fournis par les utilisateurs finaux. Pour ce que ça vaut, je ferais un effort supplémentaire, convertirais l'horodatage de l'application en UTC et le stockerais dans la base de données avec UTC comme fuseau horaire.