EST中的Django Admin日期时间

时间:2019-05-22 17:02:43

标签: python django datetime

在我的应用程序中,我需要在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时间显示时间

1 个答案:

答案 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'
]