2010-05-26 40 views
9

Tôi cảm thấy như tôi đang thiếu điều gì đó hiển nhiên ở đây. Tôi có một hình thức Django với một TimeField trên đó. Tôi muốn có thể cho phép thời gian như "10:30 sáng", nhưng tôi không thể chấp nhận định dạng nhập đó hoặc sử dụng định dạng "% P" (có số note attached nói rằng đó là "Tiện ích mở rộng độc quyền", nhưng không có t nói nó đến từ đâu). Dưới đây là ý chính của mã biểu mẫu của tôi:Các hình thức Django: Thời gian xác nhận hợp lệ

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) 

Bất kỳ lúc nào tôi gửi "10:30 AM", tôi đều gặp phải lỗi xác thực. Mô hình cơ bản có hai trường, event_start và event_end, không có trường thời gian, vì vậy tôi không nghĩ rằng vấn đề nằm trong đó. Điều gì ngu ngốc tôi đang thiếu?

+0

Bạn sẽ không thể sử dụng '% P' như vậy, tôi khá chắc chắn chỉ dành cho đầu ra và không thể được sử dụng để phân tích cú pháp (tức là mặt nạ nhập). 'ValidationError' bạn nhận được chính xác là gì? –

+0

Chỉ cần "Nhập thời gian hợp lệ". – Tom

Trả lời

12

Có được nhờ câu trả lời của Karen: các ký tự định dạng không phải là số được liệt kê cho Django's now/ date filters, chúng là những cái dành cho Python's time.strftime(format[, t]). Để chấp nhận AM/PM, bạn cần phải chuyển đổi từ% H đến% Tôi nên các bộ lọc hiện nay như sau:

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

(Thông báo này mang đến cho bạn mã nguồn mở Không có nó, tôi chưa bao giờ đã tìm. nó ra.)

+3

Cảm ơn, vì Django 1.5, sử dụng TIME_INPUT_FORMATS = ['% H:% M', '% I:% M% p', '% I:% M% p'] – Darren

+0

Cũng lưu ý rằng '% p' không cho phép LÀ hoặc P.M. – stv

Các vấn đề liên quan