2010-05-26 18 views
9

Mi sento come se mi mancasse qualcosa di ovvio qui. Ho un modulo Django con un TimeField su di esso. Voglio essere in grado di consentire tempi come "10:30 AM", ma non riesco a farlo accettare il formato di input o ad usare il formato "% P" (che ha un note attached che dice che è un "estensione proprietaria", ma non lo fa t dire da dove viene). Ecco l'essenza del mio codice modulo:Forme Django: 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) 

Ogni volta che mi presento "10:30", ottengo un errore di convalida. Il modello sottostante ha due campi, event_start e event_end, nessun campo orario, quindi non penso che il problema sia lì. Che cosa stupida mi sto perdendo?

+0

Non sarà possibile utilizzare '% P' come questo, sono abbastanza certo che è solo per l'output e non può essere utilizzato per l'analisi (vale a dire come maschera di input). Cosa 'ValidationError' ottieni esattamente? –

+0

Solo "Inserire un'ora valida". – Tom

risposta

12

Ottenuto grazie alla risposta di Karen: i caratteri di formattazione non sono quelli elencati per Django's now/ date filters, sono quelli per Python's time.strftime(format[, t]). Per accettare AM/PM, è necessario passare da% H% io così i filtri apparire così:

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

(Questo messaggio portato a voi da codice open source Senza di essa, non avrei mai immaginato. fuori.)

+3

Grazie, per Django 1.5 usa TIME_INPUT_FORMATS = ['% H:% M', '% I:% M% p', '% I:% M% p'] – Darren

+0

Nota anche che '% p' non consente AM o P.M. – stv