2010-05-26 2 views
9

मुझे लगता है कि मुझे यहां कुछ स्पष्ट याद आ रहा है। मेरे पास एक Django रूप है जिसमें TimeField है। मैं "10:30 पूर्वाह्न" जैसे समय की अनुमति देने में सक्षम होना चाहता हूं, लेकिन मैं इसे इनपुट प्रारूप को स्वीकार करने या "% P" प्रारूप का उपयोग करने के लिए नहीं प्राप्त कर सकता (जिसमें note attached कहता है कि यह "स्वामित्व विस्तार" है, लेकिन ' टी कहां से आता है)। यहां मेरे फॉर्म कोड का सारांश दिया गया है:डीजेगो फॉर्म: टाइमफिल्ड प्रमाणीकरण

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) 

जब भी मैं "10:30 पूर्वाह्न" सबमिट करता हूं, तो मुझे सत्यापन त्रुटि मिलती है। अंतर्निहित मॉडल में दो फ़ील्ड, event_start और event_end, कोई समय फ़ील्ड नहीं है, इसलिए मुझे नहीं लगता कि समस्या वहां है। मुझे क्या बेवकूफ चीज़ याद आ रही है?

+0

आप इस तरह '% पी' का उपयोग करने में सक्षम नहीं होंगे, मैं बिल्कुल निश्चित हूं कि केवल आउटपुट के लिए है, और पार्सिंग (यानी इनपुट मास्क के रूप में) के लिए उपयोग नहीं किया जा सकता है। क्या आपको 'प्रमाणीकरण त्रुटि' बिल्कुल मिलती है? –

+0

बस "वैध समय दर्ज करें"। – Tom

उत्तर

11

आपको% p निर्दिष्ट करते समय घंटों को पार्स करने के लिए आपको% I का उपयोग करने की आवश्यकता है। यहां निर्देशों की तालिका के नीचे पहला नोट देखें: http://docs.python.org/library/time.html#time.strftime

12

इसे करेन के उत्तर के लिए धन्यवाद मिला: फ़ॉर्मेटिंग वर्ण Django's now/ date filters के लिए सूचीबद्ध नहीं हैं, वे Python's time.strftime(format[, t]) के लिए हैं। स्वीकार करने के लिए AM/PM, आप% एच से% करने के लिए स्विच करने की आवश्यकता मैं तो फिल्टर अब देखो की तरह:

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

(यह संदेश खुला स्रोत कोड द्वारा लाया इसके बिना, मैं कभी नहीं लगा था। यह बाहर।)

+3

धन्यवाद, Django 1.5 के लिए TIME_INPUT_FORMATS = ['% एच:% एम', '% I:% एम% पी', '% I:% एम% पी'] – Darren

+0

यह भी ध्यान दें कि '% p' अनुमति नहीं देता है AM या पीएम – stv