J'utilise Django 1.11 avec Postgresql 9.6 et DataTables JQuery (en utilisant django-datatables pour fournir AJaX source de données du modèle DjangDjango & Postgresql annoter champ datetime à localtime
Modèle par exemple:.
class MyModel(models.Model):
start = models.DateTimeField()
end = = models.DateTimeField()
. Postgresql stocke les datetimes UTC avec info fuseau horaire, ce qui est bien
Je peux passer outre les DataTables rendent la colonne de rendre correctement le datetime dans les DataTables Vue:
if column == "start":
return timezone.localtime(row.start).strftime(STRFTIME_DATETIME_FORMAT)
Problèmes lors de la tentative de fournir la requête de filtre de recherche pour des dates partielles. Si j'ajoute une annotation à ajouter DATE_STR à la recherche sur:
def filter_queryset(self, qs):
search = self.request.GET.get(u'search[value]', None)
if search:
sql_datetime_format = getattr(settings, "SQL_DATETIME_FORMAT", "DD/MM/YYYY HH24:MI")
qs = qs.annotate(
start_str=Func(F('start'), Value(sql_datetime_format), function='to_char'),
end_str=Func(F('end'), Value(sql_datetime_format), function='to_char'),
)
q_objects = Q()
q_objects |= Q(start_str__icontains=search)
q_objects |= Q(end_str__icontains=search)
qs = qs.filter(q_objects).distinct()
return qs
Le start_str et end_str sont converties en chaînes comme UTC DateTimes pas datetimes locales.
Je UK date été affiche correctement comme 06.01.2017 00:00, mais pour le rechercher, vous devez entrer: 31/05/2017 23:00
Je ne peux pas sembler trouver loin pour obtenir start_str et end_str à l'heure locale au lieu de UTC.
Cela n'a pas retirer l'info fois, DateTZ seulement fonctionne avec la partie date, voir la réponse suivante. – Steve