/ / Django convertit toutes les dates d’un jeu d’enregistrements en un fuseau horaire - python, django, django-timezone

Django convertit toutes les dates dans un jeu d'enregistrements en fonction du fuseau horaire - python, django, django-timezone

J'ai un modèle Django qui utilise mysql comme base de données et j'utilise le support des fuseaux horaires. J'ai un champ dans mon modèle qui a une date.

Depuis que mysql ne peut pas stocker les informations de fuseau horaire dans ladatefield, je stocke le décalage horaire dans un autre champ. Lorsque j'interroge la base de données, je souhaite convertir toutes les dates en un fuseau horaire, en utilisant le décalage stocké dans la base de données.

Vous pouvez supposer que mon modèle ressemble à ceci:

class Item(models.Model):
pubDate = models.DateTimeField(verbose_name="publish date")
pubDate_tz = models.IntegerField()

et ma requête est actuellement:

items = Item.objects.all().filter(channel__category = category, pubDate__range=[today_date, tomorrow_date]).order_by("-pubDate")

Mais dans mon modèle, je souhaite que l’utilisation de item.pubDate soit automatiquement convertie dans mon fuseau horaire local.

Merci.

Réponses:

0 pour la réponse № 1

essayez d'utiliser timezone.make_aware dans votre requête?

info dans la documentation ici https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.timezone.make_aware https://docs.djangoproject.com/en/dev/topics/i18n/timezones/

un exemple de base pour la conversion timezone_aware:

today = timezone.now()

today_aware = timezone.make_aware(time_ago, timezone.get_default_timezone())

afin que vous remplaciez timezone.now par votre requête item.pudbate

si le fuseau horaire est toujours le même, vous pouvez définirle fuseau horaire utilisant le deuxième argument (timezone.get_default_timezone), si le fuseau horaire change, vous devriez pouvoir le définir comme valeur de la base de données.