2012-12-28 9 views
10

Ich habe ein Modell mit einem Datetimefield:django DateTimeField mit UTC-Offset?

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

Benutzer sollten zur Eingabe von Datum, Uhrzeit und Zeitzone Info im Bereich zugelassen werden. Dies ist mein gewünschtes Format:

Ich erwarte, dass die Zeit vor der Speicherung in db in UTC konvertiert wird. Also habe ich versucht, ein Modellformular dafür zu verwenden, aber es löst Enter a valid date/time. Validierungsfehler auf diesem DateTimeField, wenn ich den Wert oben eingeben.

Dies ist in settings.py:

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

Was bin ich?

Edit:

Per Видул Петров Vorschlag, versuchte ein Formularfeld zu verwenden:

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

Haben Sie die gleiche Wirkung: Enter a valid date/time.

Edit 2

Es scheint, dass datetime nicht mit th umgehen kann Der Parameter "% z". Dies wirft ein Valueerror:

datetime.datetime.strptime(value, format) 

Also habe ich es in der Konsole getestet:

>>> 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' 

Auch versucht 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' 

Ich fühle mich sollte dies wirklich funktionieren. Habe ich einen Teil der Dokumentation vermisst, der etwas anderes sagt?

+0

Haben Sie versucht, [input_formats] (https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.DateTimeField.input_formats)? – Vidul

+0

@ ВидулПетров kein Glück, siehe die Bearbeitung – frnhr

+0

@ Сек: Bitte versuchen 'input_formats = ('% Y-% m-% d% H:% M% z')' – Vidul

Antwort

9

Wenn Sie USE_TZ = True in den Einstellungen festgelegt, Django speichert Datums- und Zeitinformationen in UTC in der Datenbank sonst wird es naive Datum Zeit (Datum Zeit ohne Zeitzone) zu speichern.

In den meisten Fällen ist die Verwendung von Djangos Zeitzonen sehr praktisch, da Datum und Uhrzeit von Django automatisch übersetzt werden.

Aber wenn Sie wirklich Zeitzone Eingabe von Benutzer benötigen, müssen Sie USE_TZ = False dann festlegen, welche naive verwenden Datetimefield Datetime ist mit CharField entlang Zeitzoneninformationen in Ihrem models.py zu speichern.

ref: https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/

+0

Diese Einstellung verwendet "aktive" Zeitzone (wie von TimeZoneMiddleware festgelegt); kann es nicht zwingen, eine andere Zeitzone zu verwenden – Don

Verwandte Themen