2010-05-26 5 views
9

J'ai l'impression qu'il me manque quelque chose d'évident ici. J'ai un formulaire Django avec un TimeField dessus. Je veux être en mesure de permettre des temps comme "10:30 AM", mais je ne peux pas l'obtenir pour accepter ce format d'entrée ou pour utiliser le format "% P" (qui a un note attached disant que c'est une "extension Proprietary", mais doesn ' Je dis d'où ça vient). Voici l'essentiel de ma forme de code:Django Forms: 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) 

Chaque fois que je soumets « 10:30 », je reçois une erreur de validation. Le modèle sous-jacent a deux champs, event_start et event_end, aucun champ de temps, donc je ne pense pas que le problème soit là. Quelle chose stupide manque-t-il?

+0

Vous ne pourrez pas utiliser '% P' comme ça, je suis assez certain que c'est juste pour la sortie, et ne peut pas être utilisé pour l'analyse (c'est-à-dire comme masque de saisie). Qu'est-ce que 'ValidationError' obtenez-vous exactement? –

+0

Juste "Entrez une heure valide". – Tom

Répondre

12

L'a obtenu grâce à la réponse de Karen: les caractères de formatage ne sont pas ceux énumérés pour Django's now/ date filters, ils sont ceux pour Python's time.strftime(format[, t]). Pour accepter AM/PM, vous devez passer de% H% I de sorte que les filtres ressembler à:

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

(Ce message vous a apporté par le code open source Sans elle, je ne l'aurais jamais pensé. out.)

+3

Merci, pour Django 1.5, utilisez TIME_INPUT_FORMATS = ['% H:% M', '% I:% M% p', '% I:% M% p'] – Darren

+0

Notez également que '% p' ne permet pas UN M ou P.M. – stv