Python Tastypie 0.9.6:日期时间序列化不支持tz

Python Tastypie 0.9.6:日期时间序列化不支持tz,python,django,datetime,timezone,tastypie,Python,Django,Datetime,Timezone,Tastypie,我们使用tastypie来管理RESTfulWebAPI,所有这些都是通过django实现的。 Django设置为USE\u TZ=True,tastypie设置为tastypie\u DATETIME\u FORMATTING='iso-8601' 我希望datetime字段看起来像'2014-02-11T13:08:03+00:00' 但是,发送到客户机的序列化json捆绑包从不包含TZ感知日期,而是服务器本地TZ转换日期,并且去掉了TZ信息 上面的日期被序列化为'2014-02-11T14

我们使用tastypie来管理RESTfulWebAPI,所有这些都是通过django实现的。 Django设置为
USE\u TZ=True
,tastypie设置为
tastypie\u DATETIME\u FORMATTING='iso-8601'

我希望datetime字段看起来像
'2014-02-11T13:08:03+00:00'

但是,发送到客户机的序列化json捆绑包从不包含TZ感知日期,而是服务器本地TZ转换日期,并且去掉了TZ信息

上面的日期被序列化为
'2014-02-11T14:08:03'
(我在欧洲/巴黎时区)。目前,在客户端进行解析时,我们必须猜测服务器的时区,我们不喜欢这种做法:)

tastypie资源描述非常简单

我们是做错了什么还是忘记了什么


谢谢,干杯。

简单的解决方法是添加自己的序列化程序:

class ISO8601UTCOffsetSerializer(Serializer):
    """
    Default is ``iso-8601``, which looks like "2014-01-21T19:31:58.150273+00:00".
    """
    # Tastypie>=0.9.6,<=0.11.0
    def format_datetime(self, data):
        # data = make_naive(data) # Skipping this line..

        if self.datetime_formatting == 'rfc-2822':
            return dateformat.format(make_naive(data), 'r')
        if self.datetime_formatting == 'iso-8601-strict':
            # Remove microseconds to strictly adhere to iso-8601
            data = data - datetime.timedelta(microseconds=data.microsecond)

        return data.isoformat()

class MyResource(BaseModelResource):
    class Meta:
        serializer = ISO8601UTCOffsetSerializer(formats=['json'])
ISO8601UTCOffsetSerializer类(序列化程序):
"""
默认值为“iso-8601”,类似于“2014-01-21T19:31:58.150273+00:00”。
"""
#Tastypie>=0.9.6,