在django timefield中将输入设置为AM PM

时间:2014-11-04 17:21:25

标签: django django-models django-forms timefield

我希望用户能够使用我的django timefield在上午和下午之间进行选择

目前,如果我输入:

  

上午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

仍然给我上述验证错误。

我做错了什么?

4 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

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

答案 1 :(得分:5)

我正在寻找类似的答案而我找不到适合models.TimeField的答案,因此,我在网站上找到的最简单的解决方案是设置 settings.py 以下全局变量:

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

我希望这有助于某人。

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我认为你可以在forms.py

中做这样的事情
field = DateTimeField(input_formats='%H:%M %p',...)