2012-12-28 8 views
10

मैं एक DateTimeField के साथ एक मॉडल है:django डेटटाइमफ़िल्ल्ड?

deadline = models.DateTimeField(verbose_name="Valid unitl", null=True, blank=True) 

उपयोगकर्ता क्षेत्र में इनपुट की तारीख, समय और समय क्षेत्र की जानकारी के लिए अनुमति दी जानी चाहिए। यह मेरा वांछित प्रारूप है:

2012-12-31 23:30 +0430 

मुझे उम्मीद है कि डीबी को संग्रहीत करने से पहले समय यूटीसी में परिवर्तित हो जाएगा। तो मैंने इसके लिए एक मॉडल फॉर्म का उपयोग करने की कोशिश की, लेकिन अगर मैं उपरोक्त मान दर्ज करता हूं तो उस दिनांकटाइमफ़िल्ल्ड पर Enter a valid date/time. सत्यापन त्रुटि फेंकता है।

यह settings.py में है:

DATE_INPUT_FORMATS = ('%Y-%m-%d %H:%M %Z',) 

मैं क्या याद आ रही है?

संपादित करें:

प्रति Видул Петров के सुझाव के रूप में, एक फार्म क्षेत्र का उपयोग करने की कोशिश की:

deadline2 = forms.DateTimeField(input_formats=['%Y-%m-%d %H:%M %Z',], 

ही प्रभाव समझे: Enter a valid date/time.

संपादित 2

ऐसा लगता है कि डेटाटाइम वें संभाल नहीं सकता है ई "% z" पैरामीटर। यह एक ValueError फेंकता है:

datetime.datetime.strptime(value, format) 

तो मैं यह सांत्वना में परीक्षण किया:

>>> import datetime 
>>> datetime.datetime.strptime('2012-12-30 19:00 +0100', "%Y-%m-%d %H:%M %z") 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime 
(bad_directive, format)) 
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M %z' 

भी कोशिश की pytz:

>>> import pytz 
>>> pytz.datetime.datetime.strptime('2012-12-30 19:00 +0100', "%Y-%m-%d %H:%M %z") 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime 
(bad_directive, format)) 
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M %z' 

मैं वास्तव में लगता है कि यह काम करना चाहिए। क्या मुझे दस्तावेज़ों का कुछ हिस्सा याद आया जो अन्यथा कहता है?

+0

आप [input_formats] (https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.DateTimeField.input_formats) की कोशिश की? – Vidul

+0

@ ВидулПетров कोई किस्मत, संपादित करें – frnhr

+0

@ Сек: कृपया 'input_formats = ('% Y-% m-% d% h:% m% z ',' – Vidul

उत्तर

9

आपने अपनी सेटिंग में USE_TZ = True सेट करते हैं, Django दुकानों तारीख और डेटाबेस में UTC में समय की जानकारी अन्यथा यह अनुभवहीन दिनांक समय (समयक्षेत्र रहित तिथि समय) संग्रहीत करेगा।

अधिकांश मामलों में Django के समय क्षेत्र समर्थन का उपयोग करना बहुत सुविधाजनक है क्योंकि इनपुट और आउटपुट डेटाटाइम स्वचालित रूप से Django द्वारा अनुवादित किया जाएगा।

लेकिन यदि आपको वास्तव में अपने उपयोगकर्ता से टाइमज़ोन इनपुट की आवश्यकता है, तो आपको USE_TZ = False सेट करने की आवश्यकता होगी, फिर डेटटाइमफ़िल्फ़ का उपयोग करें जो आपके मॉडल में टाइमज़ोन जानकारी संग्रहीत करने के लिए चारफ़ील्ड के साथ बेवकूफ डेटाटाइम है।

रेफरी: https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/

+0

यह सेटिंग "सक्रिय" समय क्षेत्र (जैसा कि टाइमज़ोन मिडलवेयर द्वारा सेट किया गया है) का उपयोग करती है; इसे किसी अन्य टाइमज़ोन का उपयोग करने के लिए मजबूर नहीं कर सकता है – Don