【问题标题】:Django DateTime not storing ISO 8601 with T/Z (letters), but spaces insteadDjango DateTime 不使用 T/Z(字母)存储 ISO 8601,而是使用空格
【发布时间】:2018-09-19 19:55:23
【问题描述】:

所以现在,我的模型是用 serializers.DateTimeField(input_formats=["iso-8601"]) 声明的,我在打印时得到的值是:

2020-10-03 11:15:00+00:00

理想情况下是这样 2020-10-03T11:15:00+00:00

或者更理想的是,如果不需要大量工作, 2020-10:03T11:15:00Z

我该如何做到这一点?或者当它通过网络发送/发送到前端时,这会自动发生吗?

【问题讨论】:

  • 我不确定你这里说的是序列化还是反序列化。
  • 我认为是序列化?我想这样做,所以当从带有日期时间字段的模型发送回数据时,它会按照我提到的格式发送回来。据我了解,序列化意味着从模型实例 -> 磁盘/网络开始,反序列化意味着磁盘/网络 -> 模型实例。因此,在这种情况下,请按照上述格式发送。

标签: django datetime


【解决方案1】:

我相信您在这里得到了日期时间函数的默认字符串评估。打印时您想要做的是覆盖默认字符串函数。在您的序列化程序中,您希望传递一个format 参数(look here),并使用python 日期格式(date formats) 的组合构造字符串。这种格式使 python 日期字符串完全可定制。

对你来说,你的字符串应该看起来像...%Y-%m-%dT%I:%M:%SZ

【讨论】:

  • 当我进入并在单元测试中打印响应时,使用 format='iso-8601' 可以获得相同的输出。我还指定了 input_format='iso-8601',但我相信那是为了反序列化
  • 是的,所以反序列化是输入格式。如果您自己定义实际的字符串,您将能够将 T 放在那里并删除毫秒。它不会像输入“iso-8601”那么简单,但它会为您提供所需的一切。我已经用您可能正在寻找的格式更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 2022-12-11
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多