When I see dates and times in the admin, they are displayed in UTC. I\'d like for them to be displayed in my local timezone. I checked the TIME_ZONE
setting in the
In Django:
The default time zone is the time zone defined by the TIME_ZONE setting.
The current time zone is the time zone that’s used for rendering.
so you should set the "current time zone" use:
django.utils.timezone.activate(timezone)
You can activate it in a middleware(don't forger to register it to MIDDLEWARE in 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)
This is only a simple hardcode. you can making a form to select tzinfo, store it in user's profile and load it to user session, read the tzinfo from the session in the middleware.
The official documentation has a related description: https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/#selecting-the-current-time-zone
Reference:
https://groups.google.com/forum/#!topic/django-developers/E4aiv3O6vGo
You can override the template for your change_list.html
, change_form.html
, etc. and do something like:
{% extends "admin/change_list.html" %}
{% load tz %}
{% block content %}
{% timezone "US/Eastern" %}
{{ block.super }}
{% endtimezone %}
{% endblock %}
Do it with one of those methods:
Maybe you can try to set user timezone. Set
USE_TZ = True
Official documentation
This isn't supported natively in Django as of 2.1. However https://github.com/charettes/django-sundial may provide what you need -- this adds a User.timezone
model field so that you can configure it per-user.
(This middleware is very simple -- under the covers it's just calling timezone.activate(zone)
to change the rendered site's timezone).