【问题标题】:Django rest framework timefield input formatDjango rest框架时间字段输入格式
【发布时间】:2018-05-07 01:40:10
【问题描述】:

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

我想要做的是在 TimeField 中输入例如:上午 10:30。
在浏览器上的 django rest 框架 API 中,它使用的是上午 10:30 格式('%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 上:

关于邮递员:

【问题讨论】:

    标签: python django django-rest-framework timefield


    【解决方案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',...]
      

    【讨论】:

    • 我尝试在 serializer.py class MyUserSerializer(serializers.ModelSerializer): birthTime = serializers.TimeField(format='%I:%M %p', input_format='%I:%M %p') class Meta: model = MyUser fields = ('userId', 'username', 'email', 'password', 'first_name', 'last_name', 'gender', 'nric', 'birthday', 'birthTime', 'ethnicGroup', 'mobileNo', 'favoriteClinic',) 中使用它,但我得到了这个错误:` __init__() got an unexpected keyword argument 'input_format'` 抱歉行间距,shift+enter 不起作用.
    • @JinNiiSama 那是我的错,正确的论点是input_formats(我也编辑了答案)
    • 好吧,错误消失了,但我还有另一个问题,imgur.com/a/AA8d2 我很确定这是正确的格式,但我最终得到了格式错误。现在我对格式感到困惑。抱歉这些小麻烦
    • 我用这个解决了这个问题:valid_time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p'] 然后在 input_formats=valid_time_formats。现在它可以正常工作了
    • @JinNiiSama 很高兴知道,如果我的回答对您有帮助,您可以接受:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2018-07-04
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多