在我的应用程序中,我需要在EST
时区的admin部分显示一些日期时间。我在settings.py
中有以下配置:
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = False
用户选择了不同的时区,并且可以很好地工作。 Thursday, May 16, 2019 12:00 AM EDT
但是我想在管理部分的EST
时区中显示日期时间。目前,它将按预期显示在UTC
中的所有时间。我尝试了以下方法:
from datetime import datetime
from pytz import timezone
from django.contrib import admin
TZ = timezone('EST')
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
list_display = ('name', 'scheduled_date')
fieldsets = (
(None, {'fields': ('name', 'scheduled_date')}),
)
def scheduled_date(self, obj):
date = datetime(obj.scheduled_date, tzinfo=TZ)
return date
但是,管理员部分仍以scheduled_date
的UTC时间显示时间
答案 0 :(得分:1)
您可以创建一个中间件,该中间件将在运行时为来自Admin的每个请求更改时区。
例如:
import pytz
from django.utils import timezone
from django.utils.deprecation import MiddlewareMixin
class AdminTimezoneMiddleware(MiddlewareMixin):
def process_request(self, request):
if request.path.startswith('/admin'):
timezone.activate(pytz.timezone('EST'))
不要忘记在settings.MIDDLEWARE数组上添加它。
MIDDLEWARE = [
...
'yourapp.AdminTimezoneMiddleware'
]