Question

Je travaille sur une application Django où je besoin de tous les postgres représentés champs datetime être sauvés en UTC (comme ils le devraient). Quand je crée des modèles avec des champs DateTime leur représentation de base de données est générée comme « avec horodatage le fuseau horaire ». Bien que je peux modifier manuellement les tables pour supprimer le fuseau horaire des champs, je me demandais si le champ modèle DateTime a la capacité de ne pas le faire - par exemple, créer « timestamp avec zone de temps » pour certains des champs. Est-ce possible? Ou dois-je les modifier les tables? Merci, Harel

Était-ce utile?

La solution

Les types de données pour postgres sur la carte Django à la chaîne timestamp with time zone littérale, et il ne semble pas être une option pour modifier ce type.

Pour autant que je sache, vous avez trois options:

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

  2. Ecrire un champ personnalisé pour définir les modificateurs pour le champ d'horodatage comme bon vous semble. Voir « écriture des champs de modèle personnalisé ».

  3. Laissez le champ django tel qu'il est, et effectuer la conversion de fuseau horaire dans votre application de sorte que vous êtes absolument certain que vous passez le temps correct.

Ma préférence personnelle pour l'intégrité des données est n ° 3. Tout comme avec les codages de caractères, où vous voulez toujours être sûr que vous connaissez le jeu de caractères et gérez les conversions correctement, je me sens beaucoup plus à l'aise avec les dates / heures dont les attributs (y compris TZ) sont comme car ils peuvent être précisément définis. Vous pouvez être certain aujourd'hui que tous vos commentaires arrive à votre application déjà en UTC, mais cela peut changer, en particulier si les horodateurs sont fournis par les utilisateurs finaux. Pour ce que ça vaut, je vais le mile supplémentaire, convertir l'horodatage dans l'application à l'UTC et le stocker dans le DB avec UTC comme fuseau horaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top