当前位置: 代码迷 >> python >> 设置django rest框架配置的DatetimeField格式
  详细解决方案

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

热度:96   发布时间:2023-06-13 16:51:55.0

我尝试使用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')

它仍然没有变化。

有谁知道怎么设置它?

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

REST_FRAMEWORK = {
    'DATETIME_FORMAT': "%Y-%m-%dT%H:%M:%S.%fZ",
}

您不需要在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')])