J'ai un modèle "Membre" où il y a deux champs "created_at" et "updated_at". A l'origine, ils ont été définis comme suit:Enregistrer un enregistrement et Mettre à jour l'heure non stocké dans localtime django
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now_add=True, null=True)
mon settings.py ont USE_TZ = True et TIME_ZONE = "Amérique/New_York".
J'ai un middleware personnalisé défini pour activer le fuseau horaire sélectionné par l'utilisateur.
current_tz = pytz.timezone("<user defined timezone>")
timezone.activate(current_tz)
Ensuite, mettre à jour les champs pour stocker les localtime utilisateur:
created_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True)
updated_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True)
Maintenant, quand je mets à jour le dossier de membre et vérifier la updated_at temps, son montrant le même fuseau horaire UTC au lieu de l'heure locale de l'utilisateur.
Est-ce que django toujours stocke des valeurs datetime dans DB en UTC ou que je manque quelque chose ici
Ce code n'utilisera jamais que l'heure locale du serveur, pas l'utilisateur. –
J'ai édité ma question pour mentionner un middleware qui est en place pour activer le fuseau horaire selon le fuseau horaire sélectionné par l'utilisateur. Alors, comment faire pour utiliser l'heure locale de l'utilisateur, pas le serveur? – user2722127
Assez juste. Mais cela semble toujours une mauvaise idée. Pourquoi est-ce que vous voulez stocker l'heure locale, plutôt que - comme le recommande explicitement [dans la documentation] (https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/) - stockage UTC et la conversion en sortie ? –