Cuando veo fechas y horas en el administrador, se muestran en UTC. Me gustaría que se muestren en mi zona horaria local. Revisé la configuración de TIME_ZONE en los documentos , aunque no parece que sea exactamente lo que quiero. TIME_ZONE determina la zona horaria para las fechas y horas almacenadas en la base de datos, que no es lo que quiero configurar; solo quiero localize las zonas horarias para el administrador, pero no cambiar cómo se guardan en el nivel de la base de datos.
¿Hay alguna forma de hacer esto?
En Django:
La zona horaria predeterminada es la zona horaria definida por la configuración TIME_ZONE.
La zona horaria actual es la zona horaria que se utiliza para la representación.
por lo que debe configurar el uso de "zona horaria actual" :
django.utils.timezone.activate(timezone)
Puede activarlo en un middleware (no olvide registrarlo en MIDDLEWARE en settings.py):
import pytz from django.utils import timezone class TimezoneMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): timezone.activate(pytz.timezone('Asia/Shanghai') return self.get_response(request)Esto es solo un código duro simple. puede crear un formulario para seleccionar tzinfo, almacenarlo en el perfil del usuario y cargarlo en la sesión del usuario, leer el tzinfo de la sesión en el middleware.
La documentación oficial tiene una descripción relacionada: https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/#selecting-the-current-time-zone
Referencia:
https://groups.google.com/forum/#!topic/django-developers/E4aiv3O6vGo
Esto no se admite de forma nativa en Django a partir de 2.1. Sin embargo, https://github.com/charettes/django-sundial puede proporcionar lo que necesita; esto agrega un campo de modelo User.timezone para que pueda configurarlo por usuario.
(Este middleware es muy simple: debajo de las sábanas, solo está llamando a timezone.activate(zone) para cambiar la zona horaria del sitio renderizado).
Puede anular la plantilla para su change_list.html , change_form.html , etc. y hacer algo como:
{% extends "admin/change_list.html" %} {% load tz %} {% block content %} {% timezone "US/Eastern" %} {{ block.super }} {% endtimezone %} {% endblock %}Hazlo con uno de esos métodos: