2010-05-26 27 views
9

Siento que me falta algo obvio aquí. Tengo un formulario de Django con un TimeField en él. Quiero poder permitir momentos como "10:30 AM", pero no consigo que acepten ese formato de entrada o que utilicen el formato "% P" (que tiene un note attached diciendo que es una "extensión propia", pero no lo hace) t dice de dónde viene). Aquí está la esencia de mi código de formulario:Django Forms: Validación de 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) 

Cada vez que presento "10:30 AM", me sale un error de validación. El modelo subyacente tiene dos campos, event_start y event_end, sin campos de tiempo, por lo que no creo que el problema esté ahí. ¿Qué cosa tan estúpida me estoy perdiendo?

+0

No podrá usar '% P 'de esa manera, estoy bastante seguro de que es solo para salida, y no se puede usar para analizar (es decir, como una máscara de entrada). ¿Qué 'ValidationError' obtienes exactamente? –

+0

Solo "Ingrese una hora válida". – Tom

Respuesta

12

¡Gracias, gracias a la respuesta de Karen: los caracteres de formato no son los indicados para Django's now/ date filters, ellos son los que para Python's time.strftime(format[, t]). Para aceptar AM/PM, es necesario cambiar de% H% I a lo que los filtros ahora el siguiente aspecto:

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

(Este mensaje traído a usted por código de fuente abierta Sin ella, nunca hubiera imaginado. out.)

+3

Gracias, para Django 1.5 use TIME_INPUT_FORMATS = ['% H:% M', '% I:% M% p', '% I:% M% p'] – Darren

+0

También tenga en cuenta que '% p' no permite A.M o P.M. – stv

Cuestiones relacionadas