6
votes

LOADDATA ne traite pas correctement avec des horodaters et des fuseaux horaires

J'utilise django 1.4.1 avec MySQL et Timezones activés. J'ai fait des données de dépôt sur YAML, modifiées certains champs pour créer des données de test et essayer de le charger. Cependant, Django continue de se plaindre des quêtes naïques, même si un TZ est spécifié

spécifiquement, mon LoadData a: < / p> xxx

mais loaddata donne l'erreur: xxx

Cela ne m'est pas favorable, voyant que c'est: < / p>

  1. Un horodatage UTC
  2. Le même format exact Django exporté à l'aide de Dumpdata

    existe une façon de dire à Django ceci est une date UTC?


0 commentaires

4 Réponses :


9
votes

du docs ...

Lors de la sérialisation d'une date d'heure consciente, le décalage UTC est inclus, comme Ceci: p>

created_date: '2012-09-15T22:17:44Z'


1 commentaires

Cette solution n'a pas fonctionné pour moi. Changer dans le luminaire YAML par ex. "2019-01-05 01: 05: 45.754264 + 00: 00" à "2019-01-05T01: 05: 45.754264 + 00: 00" ou "2019-01-05T01: 05: 45 + 00: 00" donne des avertissements.



22
votes

Le problème provient de Pyyaml. Lorsque LOADDATA interne la dateTime à Pyyaml, il prend la dateTime consciente, ajuste l'heure à UTC, puis renvoie une date d'heure naïve, qui génère l'avertissement.

Il y a un django billet , ainsi qu'un Billet Pyyaml ​​ concernant le problème. Les deux vont de plus en détail sur le comportement inattendu ci-dessus. À en juger par les commentaires dans les billets, cette question semble peu probable d'être résolue à tout moment.

est défini time_zone = 'uc' dans Paramètres.py de votre projet, vous vous chargerez de la bonne heure, mais vous obtiendrez toujours des avertissements. Si votre fusil de fuseau horaire doit être défini sur autre chose, Django traitera la dateTime comme local et l'ajustera à l'UTC, qui est probablement indésirable.

Le meilleur moyen d'éviter que cela consiste à utiliser JSON comme format de sérialisation.

espère que cela aide.


0 commentaires

2
votes

Vous pouvez copier Django / Core / Serializers / Pyyaml.py à votre projet Dir, et remplacez le code suivant (peut-être 78-79 lignes dans le cas de ver.1.9.9) xxx

à xxx

PYTZ déjà installé et xxx

est nécessaire.

Ce code convertira toutes les valeurs naïfs DateTime en UTC au courant.

Pour remplacer par défaut Serializer, Ajout Serialization_Modules dans Paramètres.Py:




0 commentaires