当我在管理员中看到日期和时间时,它们以UTC格式显示。我想让它们显示在我当地的时区。我检查了docs中的TIME_ZONE
设置,但看起来并不像我想要的那样。 TIME_ZONE
确定存储在数据库中的日期时间的时区,这不是我想要设置的时间 - 我只想localize
管理员的时区,而不是更改它们的保存方式在数据库层面。
有办法做到这一点吗?
答案 0 :(得分:2)
在Django中:
默认时区是由TIME_ZONE设置定义的时区。
当前时区是用于渲染的时区。
因此您应该设置“当前时区” 使用:
django.utils.timezone.activate(timezone)
您可以在中间件中激活它(不要伪造将其注册到settings.py中的MIDDLEWARE):
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)
这只是一个简单的硬编码。您可以制作一个表格来选择tzinfo,将其存储在用户的配置文件中并将其加载到用户会话中,然后从中间件中的会话中读取tzinfo。
官方文档有相关描述: https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/#selecting-the-current-time-zone
参考:
https://groups.google.com/forum/#!topic/django-developers/E4aiv3O6vGo
答案 1 :(得分:1)
您可以覆盖change_list.html
,change_form.html
等模板,并执行以下操作:
{% extends "admin/change_list.html" %}
{% load tz %}
{% block content %}
{% timezone "US/Eastern" %}
{{ block.super }}
{% endtimezone %}
{% endblock %}
使用以下方法之一进行操作:
答案 2 :(得分:0)
从2.1开始,Django本身不支持此功能。但是https://github.com/charettes/django-sundial可能会提供您所需的内容-这会添加一个User.timezone
模型字段,以便您可以按用户配置它。
(此中间件非常简单-在后台,它只是调用timezone.activate(zone)
来更改渲染站点的时区)。
答案 3 :(得分:-2)