2012-12-28 10 views
10

私はDateTimeField型でモデルを持っている:django DateTimeField(UTCオフセットあり)?

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

ユーザーがフィールドに入力日付、時刻とタイムゾーン情報に許可する必要があります。これは私の希望するフォーマットです:

2012-12-31 23:30 +0430 

私は時間がdbに格納する前に変換されることを期待しています。だからモデルのフォームを使ってみましたが、上記の値を入力するとのValidationエラーが発生します。

これはsettings.pyである:

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

私は何をしないのですか?

編集:ВидулПетровの提案を1として

は、フォームフィールドを使用しようとした:編集2

Enter a valid date/time.

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

は同様の効果を得ました日時はthを処理できないようですe "%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を設定し、CharFieldと一緒に使用しているdatetimeFieldを使用して、models.pyにタイムゾーン情報を格納する必要があります。

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

+0

この設定では、「アクティブ」タイムゾーン(TimeZoneMiddlewareで設定)を使用します。別のタイムゾーンを使用するように強制することはできません – Don

関連する問題