Django不';t使用正确的时区转换日期时间

Django不';t使用正确的时区转换日期时间,django,postgresql,django-rest-framework,timezone,django-timezone,Django,Postgresql,Django Rest Framework,Timezone,Django Timezone,我正在努力弄清楚Django的时区是如何工作的。在我的系统上,即使有UTC+02时区设置,我的所有日期时间都在UTC+00中 timezone.get_default_timezone()

我正在努力弄清楚Django的时区是如何工作的。在我的系统上,即使有
UTC+02
时区设置,我的所有日期时间都在
UTC+00

timezone.get_default_timezone()                                                                                                                                                                                                                                                                                                                   
<DstTzInfo 'Europe/Rome' RMT+0:50:00 STD>

timezone.get_current_timezone()                                                                                                                                                                                                                                                                                                                   
<DstTzInfo 'Europe/Rome' RMT+0:50:00 STD>
有关的文件说:

。。。如果您使用的是PostgreSQL,则可以在USE_TZ=False之间切换 并自由使用_TZ=True。数据库连接的时区将为 分别设置为时区或UTC,以便Django获得正确的 所有情况下的日期时间。您不需要执行任何数据处理 转换

如果我试图从shell获取用户的
date\u joined
字段,则该字段为UTC+00,未转换为UTC+02(因为我使用时区,所以这是预期的)

Django还提供了使用activate()方法将最喜欢的时区设置为最终用户时区的可能性,但这是另一回事。默认情况下,当我从数据库检索数据时,所有日期时间都应转换为相对时区设置,对吗


我错过了什么?哪里出错了?

重要的是要理解,
日期时间
仅在以下情况下才会转换为当前时区。也就是说,在使用模板、表单或序列化程序(在Django Rest框架中)时


Python
datetime
对象的时区取决于数据库连接,通常为
UTC
。原因之一是时区主要是一个显示问题,因此Python对象的时区实际上并不重要。一个更重要的原因是时区转换可能会有损(因为许多时区在DST周围有不明确的时间),所以在最后一步之前,你真的不想进行这种转换。

所以如果我解决了问题,将UTC+00设置为DB级别是正确的,每次我需要向最终用户显示正确的日期时间时,我都需要在视图、模板或serializer@realnot:在视图中(或处理Python
datetime
对象的任何位置),它们将以UTC为单位。在模板中,您应该看到正确的时区,如所述。我不使用DRF,但暗示您应该在正确的时区看到它。对于大多数项目来说,很少需要将其转换为
localtime
。因此,我必须弄清楚为什么DRF不执行对话,因为我使用
USE_TZ=True
时,时区='Europe/Rome'配置正确@雷诺特:同意,这是你问题中一个意想不到的结果。
TIME_ZONE = 'Europe/Rome'
USE_TZ = True
admin.date_joined                                                                                                                                                                                                                                                                                                                                 
datetime.datetime(2017, 7, 12, 15, 22, 58, tzinfo=<UTC>)

str(admin.date_joined)                                                                                                                                                                                                                                                                                                                            
'2017-07-12 15:22:58+00:00'
"date_joined": "2017-07-12T15:22:58Z",