2010-05-26 103 views
9

我覺得我錯過了一些很明顯的東西。我有一個Django表單,其上有一個TimeField。我希望能夠允許像「10:30 AM」這樣的時間,但我無法接受輸入格式或使用「%P」格式(其中note attached稱其爲「專有擴展名」,但不支持'不知道它來自哪裏)。這是我的表單代碼的要點:Django表單:時間字段驗證

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) 

任何時候我提交「上午10:30」,我收到驗證錯誤。底層模型有兩個字段,event_start和event_end,沒有時間字段,所以我不認爲問題在那裏。我錯過了什麼愚蠢的東西?

+0

您將無法像這樣使用'%P',我相當肯定這只是輸出,並且不能用於解析(即作爲輸入掩碼)。你真的得到了什麼'ValidationError'? – 2010-05-26 15:06:27

+0

只需「輸入有效時間」即可。 – Tom 2010-05-26 15:13:59

回答

12

感謝Karen的回答:格式化字符不是Django's now/ date filters列出的那些,它們是Python's time.strftime(format[, t])。要接受AM/PM,則需要從%H切換到%我這樣的過濾器,現在看起來像:

valid_time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p'] 

(此消息由開放源代碼帶給你沒有它,我從來沒有想通。它出)。

+3

謝謝,對於Django 1.5使用TIME_INPUT_FORMATS = ['%H:%M','%I:%M%p','%I:%M%p'] – Darren 2013-07-21 05:14:29

+0

另請注意'%p'不允許上午或P.M. – stv 2016-02-28 15:49:19