django DateTimeField со смещением UTC?

У меня есть модель с DateTimeField:

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

Пользователям должно быть разрешено вводить дату, время и информацию о часовом поясе в поле. Это мой желаемый формат:

2012-12-31 23:30 +0430

Я ожидаю, что время будет преобразовано в UTC перед сохранением в БД. Поэтому я попытался использовать для этого форму модели, но она выдает ошибку проверки Enter a valid date/time. для этого DateTimeField, если я ввожу значение выше.

Это в 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

Похоже, что datetime не может обработать параметр "%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'

Я действительно чувствую, что это должно сработать. Я пропустил какую-то часть документации, которая говорит об обратном?


person frnhr    schedule 28.12.2012    source источник
comment
Вы пробовали input_formats?   -  person Vidul    schedule 29.12.2012
comment
@ВидулПетров не повезло, см. правку   -  person frnhr    schedule 29.12.2012
comment
@Сек: пожалуйста, попробуй input_formats=('%Y-%m-%d %H:%M %z',)   -  person Vidul    schedule 29.12.2012
comment
@ВидулПетров пробовал, все равно не повезло   -  person frnhr    schedule 29.12.2012
comment
связанные: stackoverflow.com/questions/1101508/   -  person Mike Fogel    schedule 21.01.2013


Ответы (1)


Когда вы устанавливаете USE_TZ = True в своих настройках, Django сохраняет информацию о дате и времени в формате UTC в базе данных, в противном случае он будет хранить наивную дату и время (дата и время без часового пояса).

В большинстве случаев использование поддержки часовых поясов Django очень удобно, потому что дата и время ввода и вывода будут автоматически переведены Django.

Но если вам действительно нужен ввод часового пояса от вашего пользователя, вам нужно будет установить USE_TZ = False, а затем использовать DateTimeField, который является наивным datetime, вместе с CharField для хранения информации о часовом поясе в ваших моделях.py.

ссылка: https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/< /а>

person Chatri Sae-Tung    schedule 05.02.2013