Comment mettre timedelta dans django modèle?
Avec inspectdb j'ai été en mesure d'obtenir un "intervalle" champ de postgres dans django. Dans Django, c'était un Champ de texte. L'objet que j'ai récupéré était en effet un timedelta objet!
Maintenant, je veux mettre ce timedelta objet dans un nouveau modèle. Quelle est la meilleure façon de le faire? Parce que mettre un timedelta dans un TextField résultats dans les str version de l'objet...
- Depuis Django 1.8 vous pouvez utiliser DurationField.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez trivialement de normaliser une timedelta à un seul nombre à virgule flottante en jours, voire en quelques secondes.
Voici le "Normaliser à Jours" version.
Vous pouvez trivialement tour un nombre à virgule flottante dans un timedelta.
Donc, stocker vos timedelta comme un float.
Voici le "Normaliser à la seconde" version.
Ici est le contraire (à l'aide de secondes)
Depuis Django 1.8 vous pouvez utiliser DurationField.
https://bitbucket.org/schinckel/django-timedelta-field/src
Tout d'abord, définissez votre modèle:
Pour stocker un timedelta objet:
Pour obtenir le timedelta objet de la base de données:
Remarque: j'utilise Python 2.7 pour cet exemple.
total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
Il y a un billet qui remonte à juillet 2006 relative à ceci:
https://code.djangoproject.com/ticket/2443
Plusieurs patchs ont été écrites, mais celui qui a été transformé en un projet:
https://github.com/johnpaulett/django-durationfield
Par rapport à toutes les autres réponses ici, ce projet est arrivé à maturité et aurait été fusionnés à la base, sauf que son inclusion est actuellement considéré comme étant "bloaty".
Personnellement, j'ai juste essayé un tas de solutions et c'est le seul qui fonctionne à merveille.
Résultat:
Et dans l'admin:
Événement de changement de
Durée:
7 days, 0:00:00
DurationField
: docs.djangoproject.com/en/dev/releases/1.8/#new-data-typesPour PostgreSQL, utilisez django-pgsql-intervalle-champ ici: http://code.google.com/p/django-pgsql-interval-field/
Mettre ce là la cause peut être une autre façon de résoudre ce problème.
la première installation de cette bibliothèque: https://pypi.python.org/pypi/django-timedeltafield
Alors:
au sein de l'administrateur vous sera demandé d'entrer les données dans le champ avec le format suivant: 3 jours, 4 heures, 2 minutes