Django Forms: проверка временных полей - PullRequest
9 голосов
/ 26 мая 2010

Я чувствую, что упускаю что-то очевидное здесь. У меня есть форма Django с TimeField . Я хочу иметь возможность разрешать время, например «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)

Каждый раз, когда я отправляю «10:30 AM», я получаю ошибку проверки. Базовая модель имеет два поля, event_start и event_end, без временных полей, поэтому я не думаю, что проблема в этом. Какую глупость я пропускаю?

Ответы [ 2 ]

12 голосов
/ 26 мая 2010

Получил это благодаря ответу Карен: символы форматирования не те, что перечислены для Фильтры Django сейчас / даты , они Python's time.strftime (format [, t ]) . Чтобы принять AM / PM, вам нужно переключиться с% H на% I, чтобы фильтры теперь выглядели так:

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

(Это сообщение доставлено вам с открытым исходным кодом. Без него я бы никогда его не понял.)

11 голосов
/ 26 мая 2010

Вам нужно использовать% I для разбора часов, когда вы указываете% p. См. Первое примечание под таблицей директив здесь: http://docs.python.org/library/time.html#time.strftime.

...