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']
.
因此您可以在序列化器上指定 format
和 input_formats
,或者设置 settings.TIME_FORMAT
和 settings.TIME_INPUT_FORMATS
。
让我们设置第一种情况:
class MySerializer(serializers.Serializer):
...
birthTime=serializers.TimeField(format='%I:%M %p', input_formats='%I:%M %p')
一些建议:
- 使您的变量名蛇形大小写:
birth_time
。
您可能需要尝试一下输入格式,因为您可能需要许多不同的输入:
input_formats=['%I:%M %p','%H:%M',...]
经过几个小时的搜索,我找到了许多相关但无法提供帮助的帖子。
我想做的是输入例如: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 theTIME_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, theTIME_INPUT_FORMATS
setting will be used, which defaults to['iso-8601']
.
因此您可以在序列化器上指定 format
和 input_formats
,或者设置 settings.TIME_FORMAT
和 settings.TIME_INPUT_FORMATS
。
让我们设置第一种情况:
class MySerializer(serializers.Serializer):
...
birthTime=serializers.TimeField(format='%I:%M %p', input_formats='%I:%M %p')
一些建议:
- 使您的变量名蛇形大小写:
birth_time
。 您可能需要尝试一下输入格式,因为您可能需要许多不同的输入:
input_formats=['%I:%M %p','%H:%M',...]