Django Forms:TimeField验证

Tom*_*Tom 9 forms django validation timefield

我觉得我在这里遗漏了一些明显的东西.我有一个带有TimeField的Django表单.我希望能够允许"10:30 AM"之类的时间,但是我不能让它接受输入格式或使用"%P"格式(附带说明它是"专有扩展",但不是不要说它来自哪里.这是我的表单代码的要点:

calendar_widget = forms.widgets.DateInput(attrs={'class': 'date-pick'}, format='%m/%d/%Y')
time_widget = forms.widgets.TimeInput(attrs={'class': 'time-pick'})
valid_time_formats = ['%P', '%H:%M%A', '%H:%M %A', '%H:%M%a', '%H:%M %a']

class EventForm(forms.ModelForm):
    start_date = forms.DateField(widget=calendar_widget)
    start_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats)
    end_date = forms.DateField(required=False, widget=calendar_widget)
    end_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats)
    description = forms.CharField(widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)

每当我提交"10:30 AM"时,我都会收到验证错误.底层模型有两个字段,event_start和event_end,没有时间字段,所以我认为问题不在那里.我错过了什么愚蠢的事情?

Tom*_*Tom 12

得益于Karen的回答:格式化字符不是为Django现在/日期过滤器列出,它们是Python的time.strftime(格式[,t]).要接受AM/PM,您需要从%H切换到%I,以便过滤器现在看起来像:

valid_time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p']
Run Code Online (Sandbox Code Playgroud)

(这条消息是通过开源代码提供给你的.没有它,我从未想过它.)

  • 谢谢,对于Django 1.5,使用TIME_INPUT_FORMATS = ['%H:%M','%I:%M%p','%I:%M%p'] (3认同)

小智 11

指定%p时,需要使用%I来解析小时数.请参阅此处指令表下的第一个注释:http://docs.python.org/library/time.html#time.strftime.