在Django admin中显示带时区的时间戳
我有一个带有时区意识的在Django admin中显示带时区的时间戳,django,timezone,Django,Timezone,我有一个带有时区意识的DateTimeField模型。每个对象可能使用不同的时区。我希望Django Admin使用时区后缀(EST等)显示此字段,而不是在用户或服务器的本地时间 我不想全局修改项目的时区本地化设置。这应该只适用于这一个字段 涉及到类似的东西,但我对解决方案持怀疑态度;当初始化对象类时,它会激活一个新的时区,这不允许更改每行的时区,并且会影响我不感兴趣的其他时间戳 一种方法是将时间戳字段替换为我们手动处理时区的计算字段: class EventInline(admin.Tabul
DateTimeField
模型。每个对象可能使用不同的时区。我希望Django Admin使用时区后缀(EST
等)显示此字段,而不是在用户或服务器的本地时间
我不想全局修改项目的时区本地化设置。这应该只适用于这一个字段
涉及到类似的东西,但我对解决方案持怀疑态度;当初始化对象类时,它会激活一个新的时区,这不允许更改每行的时区,并且会影响我不感兴趣的其他时间戳 一种方法是将
时间戳
字段替换为我们手动处理时区的计算字段:
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\u格式
不会改变Admin呈现时间戳的方式。)
但是,日期似乎存储为UTC,时区信息丢失。我必须单独存储时区,并使用obj.timestamp.astimezone(pytz.timezone(obj.timestamp_tz))