Django rest framework 时间域输入格式

Django rest framework timefield input format

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

我想做的是输入例如:10:30 AM 到 TimeField。
在浏览器上的 django rest framework 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:

在邮递员上:

转换Serializer验证方法中的结果并return它。

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

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

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

在哪里

format - A string representing the output format. If not specified, this defaults to the same value as the TIME_FORMAT settings key, which will be 'iso-8601' unless set. Setting to a format string indicates that to_representation return values should be coerced to string output. Format strings are described below. Setting this value to None indicates that Python.

input_formats - A list of strings representing the input formats which may be used to parse the date. If not specified, the TIME_INPUT_FORMATS setting will be used, which defaults to ['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',...]