【问题标题】:set input to AM PM in django timefield在 django 时间域中将输入设置为 AM PM
【发布时间】:2014-12-31 16:49:54
【问题描述】:

我想让用户能够使用我的 django 时间域在上午和下午之间进行选择

目前如果我输入:

上午 11:00

,我收到一个表单错误:“输入有效时间。”

如果我输入:

11:00

表单验证没有问题。

我也试过了:

class RemindersForm(forms.ModelForm):

    remdinder = forms.TimeField(input_formats='%H:%M %p',)

    class Meta:
        model = NotificationPreference
        fields = (
                  'reminder', 
                  )

这会将输入格式更改为:

11:00:00

仍然给我上面的验证错误。

我做错了什么?

【问题讨论】:

    标签: django django-models django-forms timefield


    【解决方案1】:

    我正在寻找类似的答案,但我没有找到适合 models.TimeField 的答案,因此,我发现在整个网站范围内执行此操作的最简单的解决方案是在您的 设置中进行设置.py 以下全局变量:

    TIME_INPUT_FORMATS = ['%I:%M %p',]
    

    我希望这对某人有所帮助。

    要使用其他格式,请参阅:

    https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

    【讨论】:

    • 非常有用且干燥。
    • 通过这种方法,我们仍然无法在输入字段中使用 AM 或 PM,虽然 AM 或 PM 存储在数据库中,但我们必须使用 24 小时制提供输入。跨度>
    【解决方案2】:

    要获得 12 小时的时间格式,您可以使用以下内容:

    对于输入(这是 Django 在验证中使用的格式列表):

    field = TimeField(input_formats=('%I:%M %p',...,...))
    

    用于输出(这是 Django 用于显示时间值的格式):

    field = TimeField(widget=TimeInput(format='%I:%M %p'))
    

    %I 表示 12 小时时钟格式,而 %H 表示 24 小时时钟格式。

    此外,默认的 input_formats 列表可以在每个 locales formats.py 文件中找到。 Django 使用 input_formats 列表中的第一种格式作为时间字段的默认输出格式。

    【讨论】:

      【解决方案3】:

      我认为你可以在 forms.py 中做这样的事情

      field = DateTimeField(input_formats='%H:%M %p',...)
      

      【讨论】:

      • 我现在的时间显示为 14:30:00。这种格式正确吗?
      【解决方案4】:

      根据Django documentationpython's datetime docs,如果您将时间输入设置更改为:

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

      【讨论】:

      • 你是说把这个添加到表单域构造函数中吗?此外,这个时间格式对我来说显示为 14:30:00。这种格式正确吗?
      • 我的这条评论有点晚了,但没有像上午 14:30 这样的事情开始。
      • 这个答案对我有用,除了 %H 改为 %I。像这样:TIME_INPUT_FORMATS = ( '%I:%M %p', )
      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2011-12-29
      • 2022-01-19
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多