设置django rest框架配置的DatetimeField格式

时间:2015-10-22 09:21:35

标签: python django python-2.7 serialization django-rest-framework

我尝试使用DRF序列化程序来序列化模型对象。我发现对象中的DatetimeField不会输出ISO-8601格式的"2015-10-21T09:28:53.769000Z"

我查找DRF文档,为什么我无法输出ISO-8601格式。根据{{​​3}}说:

  

format - 表示输出格式的字符串。如果未指定,则默认为与DATETIME_FORMAT设置键相同的值,该键将是' iso-8601'除非设定。设置为格式字符串表示to_representation返回值应强制转换为字符串输出。格式字符串如下所述。将此值设置为None表示Python

这意味着如果我从未设置iso-8601参数,它默认输出DATETIME_FORMAT格式?还没有,它仍然没有变化。

当我尝试编写django项目的设置时如下:

REST_FRAMEWORK = {
    'DATETIME_FORMAT': "iso-8601",
}

或者我在DatetimeField参数中写如下:

class UserSerializer(...):
    last_login = DatetimeField(format='iso-8601')
    class Meta:
        model = User
        fields = ('email', 'displayname', 'is_active',
                  'date_joined', 'last_login')

它仍然没有变化。

任何人都知道如何设置它?

2 个答案:

答案 0 :(得分:21)

如果你不知道发生了什么,你仍然没有解决这个问题,我可以在设置中定义一个datettime格式如下:

li_#_type

答案 1 :(得分:2)

您无需在设置中定义DATETIME_FORMAT或在format字段中定位last_login,因为iso-861是默认格式。

以下是一个示例示例,显示iso-861格式的日期时间字段的序列化输出。

In [1]: from rest_framework import serializers

In [2]: from datetime import datetime

In [3]: class SomeSerializer(serializers.Serializer):
   ....:     last_login = serializers.DateTimeField()
   ....:     

In [4]: x = SomeSerializer(data={'last_login':datetime.now()})

In [5]: x.is_valid()
Out[5]: True

In [6]: x.data # representation of 'last_login' will be in iso-8601 formatted string
Out[6]: OrderedDict([('last_login', u'2015-10-22T09:32:02.788611Z')])