Django: Naïf datetime tandis que le temps de la zone de support est actif (sqlite)
Je vais tourner en rond sur ce sur et besoin d'un peu d'aide. Je continue à mettre un naive timezone
avertissement. Pas sûr de ce que je fais de mal! Arg.
Voici l'avertissement:
/django/db/models/fields/__init__.py:1222: RuntimeWarning: DateTimeField Video.modified received a naive datetime (2014-10-07 00:00:00) while time zone support is active.
RuntimeWarning)
Voici le code du modèle (expurgé un peu):
from django.db import models
from django.utils import timezone
class ItemBase(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField(editable=False)
class Meta:
abstract = True
def save(self, *args, **kwargs):
"""Updates timestamps on save"""
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(ItemBase, self).save(*args, **kwargs)
class Video(ItemBase):
pass
Et pertinents (je pense) une partie de mon fichier de paramètres:
TIME_ZONE = 'UTC'
USE_TZ = True
Est-ce un sqlite question (je suis encore à tester des choses)? Ou ai-je raté quelque chose de fondamental ici? J'ai lu sur elle ici et ici et, bien sûr, à l'docs ici. Mais je suis perplexe. Merci.
edit: ajout test qui génère l'erreur
Obtiens l'erreur quand je lance mes tests ... j'ai laissé la expurgée des trucs là, mais vous devriez obtenir l'idée:
from django.test import TestCase
from django.contrib.auth import get_user_model
from video.models import Video, VideoAccount
class VideoTestCase(TestCase):
def setUp(self):
user = get_user_model().objects.create_user(
username='jacob', email='[email protected]', password='top_secret')
self.video_account = VideoAccount.objects.create(
account_type=1, account_id=12345, display_name="Test Account" )
self.pk1 = Video.objects.create(video_type=1, video_id="Q7X3fyId2U0",
video_account=self.video_account, owner=user)
def test_video_creation(self):
"""Creates a video object"""
self.assertEqual(self.pk1.video_id, "Q7X3fyId2U0")
self.assertEqual(self.pk1.video_link, "https://www.youtube.com/watch?v=Q7X3fyId2U0")
lorsque vous obtenez cette erreur
quand je suis en création d'un nouveau modèle dans mon test de la suite - désolé, je crois que j'aurais compris que ... je peux ajouter que, dans le fond! ... et, je ne vois pas qui d'avertissement dans le serveur de développement lorsque j'ajoute une aide de l'admin ... seulement lors de l'exécution des tests.
supprimer
il n'est certainement supprimer l'avertissement, mais je veux le fuseau horaire de soutien! Donc mon problème n'est pas encore fixé. Sourire.
Ce que vous avez posté regarde, à droite, de sorte que le problème doit être ailleurs. Puisque vous dites que ça n'arrive qu'avec des tests, essayez
quand je suis en création d'un nouveau modèle dans mon test de la suite - désolé, je crois que j'aurais compris que ... je peux ajouter que, dans le fond! ... et, je ne vois pas qui d'avertissement dans le serveur de développement lorsque j'ajoute une aide de l'admin ... seulement lors de l'exécution des tests.
supprimer
USE_TZ = True
, ce qui pourrait résoudre votre problème.il n'est certainement supprimer l'avertissement, mais je veux le fuseau horaire de soutien! Donc mon problème n'est pas encore fixé. Sourire.
Ce que vous avez posté regarde, à droite, de sorte que le problème doit être ailleurs. Puisque vous dites que ça n'arrive qu'avec des tests, essayez
TransactionTestCase
au lieu de TestCase
. Il ne devrait pas, mais elle est en général plus sûr. Publier vos non expurgés le code du modèle, ainsi que le test exact de la commande que vous êtes en cours d'exécution. Avez-vous plusieurs fichiers de configuration?OriginalL'auteur thornomad | 2014-10-08
Vous devez vous connecter pour publier un commentaire.
Donc j'ai finalement pensé à elle et j'apprécie tous les commentaires qui m'ont fait réfléchir dans le droit chemin:
L'une de mes dernières migrations ont
datetime.date.today()
comme valeur par défaut (qui est un indicateur de l'migrations donner). Je ne pense pas que ça, car à l'époque je n'ai même pas de toutes les données dans le modèle et puis, même si le fait que la migration avait ensuite été transféré à nouveau (plus bas sur la route), il semble que le système de test est en cours d'exécution chaque migration chaque fois qu'il démarre. Donc: a faire que d'avertissement.Mise à jour: ce devrait être fixe dans 1.7.1.
OriginalL'auteur thornomad
Vous utilisez la base de données SQLite et SQlite db ne prend pas en charge les fuseaux horaires. Ceci est à l'origine de l'avertissement.
Cet avertissement peut être supprimé en utilisant un autre DB backend.
Si vous voulez obtenu avec sqlite probablement de mettre ces lignes dans le fichier de paramètres peut aider:
settings.py
fichier mais pas de chance!Ceci est incorrect. La base de données n'a pas besoin de l'appui de fuseaux horaires car datetimes sont toujours stockés au format UTC lorsque
USE_TZ = True
. Conscient datetimes et SQLite fonctionne parfaitement bien ensemble.docs(sqlite.org/datatype3.html) SQLite ne pas avoir une classe de stockage mis de côté pour le stockage des dates et/ou heures. Au lieu de cela, le haut-Fonctions de Date Et Heure de SQLite sont capables de stocker des dates et des heures en tant que TEXTE, RÉEL, ou des valeurs entières. Aussi L'Erreur:: RuntimeWarning: DateTimeField Vidéo.modifié reçu un naïf datetime (2014-10-07 00:00:00) alors que le temps de la zone de support est actif... Quand django essaie de lire la valeur de champ de SQLite db il obtient chaîne qui n'a pas de tz info (Pour en savoir plus consultez: groups.google.com/forum/#!topic/django-développeurs/duK0htVhq3k)
Je n'ai pas dit que SQLite fuseaux horaires supportés, je l'ai dit il n'a pas d' à l'appui de fuseaux horaires car datetimes sont normalisées à l'UTC, avant le stockage. Pour ce qui est du message du fil, il est de plus de trois ans et est antérieure à l'introduction de fuseau horaire soutien. Si vous avez besoin de plus de preuves, veuillez noter que le SQLite spécifiques de la documentation ne pas mentionner le manque de soutien pour la conscience datetimes.
Je pense qu'il a quelque chose à voir avec le système de test; si je lance la même série de commandes dans le
shell
je n'ai pas toutRuntimeWarning
... vous ne savez pas quoi en faire mais je trouve ça désagréable pour dire le moins!OriginalL'auteur umang agarwal
Avez-vous installé http://pytz.sourceforge.net/ ?
OriginalL'auteur Cherif KAOUA