问题描述
我尝试使用DRF序列化程序来序列化模型对象。
我发现对象中的DatetimeField不会输出ISO-8601格式的"2015-10-21T09:28:53.769000Z"
我查找DRF文档为什么我不能输出ISO-8601格式。 据说:
format
- 表示输出格式的字符串。 如果未指定,则默认为与DATETIME_FORMAT设置键相同的值,除非设置,否则将为“iso-8601”。 设置为格式字符串表示to_representation返回值应强制转换为字符串输出。 格式字符串如下所述。 将此值设置为None表示Python
这意味着如果我从未设置DATETIME_FORMAT
参数,则默认输出iso-8601
格式?
还没有,它仍然没有变化。
当我尝试编写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')
它仍然没有变化。
有谁知道怎么设置它?
1楼
如果你不知道发生了什么,你仍然没有解决这个问题,我可以在设置中定义一个datettime格式如下:
REST_FRAMEWORK = {
'DATETIME_FORMAT': "%Y-%m-%dT%H:%M:%S.%fZ",
}
2楼
您不需要在last_login
字段中的设置或format
中定义DATETIME_FORMAT
,因为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')])