J'essaie d'envoyer un simple courrier en utilisant IPython. Je n'ai pas configuré de modèle obtenant toujours cette erreur. Ce qui peut être fait?
Erreur: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py: 827: RuntimeWarning: DateTimeField a reçu un datetime naïf (2013-09-04 14: 14: 13.698105) lorsque la prise en charge du fuseau horaire est active. RuntimeWarning)
Testé: La première étape consiste à ajouter USE_TZ = True
à votre fichier de paramètres et à installer pytz
(si possible).
Erreur modifiée:
(learn)sourabh@sL:~/Django/learn/event$ python manage.py shell
/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:53: RuntimeWarning: SQLite received a naive datetime (2013-09-05 00:59:32.181872) while time zone support is active.
RuntimeWarning)
la source
tzinfo=<UTC>
, qu'est-ce que c'est<UTC>
? Ce n'est pas une construction syntaxique que j'ai vue.datetime.now
, remplacez-le partimezone.now
et ajoutez-from django.utils import timezone
le en haut.import pytz
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
USE_TZ = True
,TIME_ZONE = 'UTC'
. Mais quand je l'utilise,timezone.now()
il ne montre pastzinfo=<UTC>
.... Donc, cet objet datetime est passé comme un objet naïf. Pourquoi cela arrive-t-il?Utilisez la fonction django.utils.timezone.make_aware pour rendre vos fuseaux horaires naïfs conscients du fuseau horaire et éviter ces avertissements.
Il convertit un objet datetime naïf (sans informations de fuseau horaire) en un objet contenant des informations de fuseau horaire (en utilisant le fuseau horaire spécifié dans vos paramètres django si vous ne le spécifiez pas explicitement comme deuxième argument):
la source
auto_now
etauto_now_add
fonctionnera bien pour les champs datetime. Si vous devez avoir un objet datetime actuel sensible au fuseau horaire dans les modèles pour une raison quelconque, utilisez ladjango.utils.timezone.now()
fonctionJuste pour corriger l'erreur pour régler l'heure actuelle
la source
On peut à la fois corriger l'avertissement et utiliser le fuseau horaire spécifié dans settings.py, qui peut être différent de l'UTC.
Par exemple dans mon settings.py j'ai:
Voici une solution; l'avantage est que cela
str(mydate)
donne l'heure correcte:Une autre méthode équivalente utilise
make_aware
, voir dmrz post.la source
Rapide et sale - Éteignez-le:
dans votre
settings.py
la source
Vous pouvez également remplacer les paramètres, particulièrement utiles dans les tests:
Cela vous évitera de voir l'avertissement, en même temps, tout élément de votre code qui nécessite un datetime sensible au fuseau horaire peut vous poser des problèmes. Si tel est le cas, voir la réponse du kravietz.
la source
Si vous essayez de transformer un datetime naïf en un datetime avec fuseau horaire dans django, voici ma solution:
t1 est un datetime naïf et t2 est un datetime avec un fuseau horaire dans les paramètres de django.
la source