【问题标题】:Set DatetimeField format of django rest framework configuration设置django rest框架配置的DatetimeField格式
【发布时间】:2016-01-21 12:37:27
【问题描述】:

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

我查找 DRF 文档为什么我不能输出 ISO-8601 格式。据datetimefield说:

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')

还是没有变化。

有人知道怎么设置吗?

【问题讨论】:

  • DatetimeField in object won't output "..." of the ISO-8601 format 它输出什么?
  • 我也面临同样的问题!如果我使用此字段的验证数据,它会输出类似“2018-01-12 10:20:55”的内容(这可能是日期时间对象的默认表示?)。我对文档的理解是输出应该是“2018-01-12T10:20:55+00:00”。我现在在 valid_data 上调用 isoformat() 以获得正确的格式,但我一定错过了一些东西......

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


【解决方案1】:

如果你不知道会发生什么并且你仍然不喜欢它,我可以在设置中定义一个 datettime 格式,如下所示:

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

【讨论】:

  • 这仅适用于您的服务器 TIME_ZONE 配置在 UCT 中。 Z 表示该时间是 UTC,并且您在格式末尾强制使用“Z”。如果要正确指示位置,必须设置 %Z 或 %z。
【解决方案2】:

您无需在设置中定义DATETIME_FORMAT 或在last_login 字段中定义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')])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2015-09-03
    • 2015-12-02
    相关资源
    最近更新 更多