2010-05-26 21 views
9

Burada bariz bir şey eksik gibi hissediyorum. Üzerinde bir TimeField ile bir Django formu var. "10:30" gibi zamanlara izin vermek istiyorum, ancak bu giriş formatını kabul etmem ya da "% P" biçimini kullanamıyorum (note attached "Tescilli bir uzantı" dır ancak Nereden geldiğini söyleme). İşte benim form kodunun ana fikiri:Django Formlar: TimeField Validation

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) 

ben "10:30 AM" teslim Her zaman, ben bir doğrulama hatası alıyorum. Temel modelin iki alanı vardır: event_start ve event_end, zaman alanları yok, bu yüzden sorunun orada olduğunu düşünmüyorum. Hangi aptal şey eksik?

+0

"% P" işlevini kullanamayacaksınız, yalnızca çıktı için oldukça eminim ve ayrıştırma için kullanılamıyor (ör. Giriş maskesi olarak). Tam olarak ne ValidationError 'alırsınız? –

+0

Sadece "Geçerli bir zaman girin". – Tom

cevap

12

Karen'in cevabı sayesinde teşekkürler: biçimlendirme karakterleri Django's now/ date filters için listelenenler değil, Python's time.strftime(format[, t]) için olanlar. AM/PM kabul etmek için o kadar filtreler artık bakmak% ila% H geçmek gerekiyor gibi:

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

(Bu mesaj Düşündüm etmezdim, Onsuz açık kaynak koduna tarafından getirildi.

+3

Django 1.5 kullanımı için teşekkürler TIME_INPUT_FORMATS = ['% H:% M', '% I:% M% p', '% I:% M% p'] – Darren

+0

Ayrıca, '% p' ​​nin izin vermediğine dikkat edin. AM veya P.M. – stv