Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django admin中显示带时区的时间戳_Django_Timezone - Fatal编程技术网

在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))