Django休息框架时域输入格式

时间:2017-11-23 07:13:42

标签: python django django-rest-framework timefield

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

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

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

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

但它对我不起作用。

对不起我在django休息框架方面缺乏经验,因为我还在学习。

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

On browser API

邮递员:

On postman

2 个答案:

答案 0 :(得分:1)

如果您查看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']

因此,您可以在序列化程序中指定formatinput_formats,也可以设置settings.TIME_FORMATsettings.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',...]
    

答案 1 :(得分:0)

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

import time
t = time.strptime(timevalue_24hour, "%H:%M")
timevalue_12hour = time.strftime( "%I:%M %p", t )