5

经过数小时的搜索,我发现了许多相关但无法提供帮助的帖子。

我想要做的是在 TimeField 中输入例如:上午 10:30。
在浏览器上的 django rest 框架 API 中,它使用的是这种 10:30 AM 格式('%I:%M %p')。
但是当我使用邮递员对其进行测试时,输出为 24 小时格式('%H:%M:%S')。我也尝试使用 10:30 PM 作为输入,但我得到的输出是 10:30:00 而不是 22:30:00。

settings.py我发现的许多答案都建议使用以下行更改 TimeField 格式:

TIME_INPUT_FORMATS = ('%I:%M %p',)

但这对我不起作用。

很抱歉我在 django rest 框架上缺乏经验,因为我还在学习。

这是结果的屏幕截图。在浏览器 API 上:

在浏览器 API 上

关于邮递员:

关于邮递员

4

2 回答 2

7

如果您查看TimeField上的文档,您将看到:

签名:TimeField(format=api_settings.TIME_FORMAT, input_formats=None)

在哪里

format- 表示输出格式的字符串。TIME_FORMAT如果未指定,则默认为与设置键相同的值,'iso-8601'除非设置。设置为格式字符串表示 to_representation 返回值应强制转换为字符串输出。格式字符串如下所述。将此值设置为 None 表示 Python.

input_formats- 表示可用于解析日期的输入格式的字符串列表。如果未指定,TIME_INPUT_FORMATS将使用该设置,默认为['iso-8601'].

因此,您可以在序列化程序上指定formatand input_formats,或者设置settings.TIME_FORMATand settings.TIME_INPUT_FORMATS

让我们设置第一种情况:

class MySerializer(serializers.Serializer):
    ...
    birthTime=serializers.TimeField(format='%I:%M %p', input_formats='%I:%M %p')

一些建议:

  1. 让你的变量名蛇大小写:birth_time.
  2. 您可能需要对输入格式进行一些尝试,因为您可能期望许多不同的输入:

    input_formats=['%I:%M %p','%H:%M',...]
    
于 2017-11-23T08:43:48.070 回答
-1

在 Serializer validate 方法中转换结果并返回。

import time
t = time.strptime(timevalue_24hour, "%H:%M")
timevalue_12hour = time.strftime( "%I:%M %p", t )
于 2017-11-23T07:36:38.690 回答