Одним из способов было бы заменить поле timestamp
вычисляемым полем, в котором мы вручную обрабатываем часовой пояс:
class EventInline(admin.TabularInline):
model = Event
readonly_fields = ('timestamp_local',)
def get_fields(self, request, obj=None):
fields = super().get_fields(request, obj=obj)
fields.remove('timestamp_local')
fields[fields.index('timestamp')] = 'timestamp_local'
return fields
def timestamp_local(self, obj):
d = obj.timestamp
return (f'{d.strftime("%b")} {d.day}, {d.year} at '
f'{d.strftime("%H:%M:%S %Z")}')
timestamp_local.short_description = 'timestamp'
Я пытался использовать поддержку часового пояса Django и служебный модуль dateformat
но были некоторые проблемы. (Они даже используются остальной частью Django Admin? Обновление DATETIME_FORMAT
не меняет способ, которым Admin отображает временные метки.)
Однако кажется, что даты сохраняются как UT C и информация о часовом поясе потерян. Мне пришлось хранить часовой пояс отдельно, и использовать obj.timestamp.astimezone(pytz.timezone(obj.timestamp_tz))