2010-05-26 4 views
9

Я чувствую, что мне не хватает чего-то очевидного здесь. У меня есть форма Django с TimeField. Я хочу, чтобы у вас было время, например «10:30 утра», но я не могу заставить его принять этот формат ввода или использовать формат «% P» (который имеет note attached, говорящий, что это «проприетарное расширение», скажите, откуда оно взялось). Вот суть моего кода формы:Django Forms: Проверка TimeField

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, без полей времени, поэтому я не думаю, что проблема там. Какую тупую вещь мне не хватает?

+0

Вы не сможете использовать '% P', я уверен, что это просто для вывода и не может использоваться для синтаксического анализа (т. Е. Как маска ввода). Какая 'ValidationError' вы получаете именно? –

+0

Просто введите действующее время. – Tom

ответ

12

Получил это благодаря ответу Карена: символы форматирования не те, что указаны для 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

+0

Также обратите внимание, что '% p' не разрешает AM или P.M. – stv