我尝试使用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')
它仍然没有变化。
任何人都知道如何设置它?
答案 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')])