2017-02-19 8 views
0

Sqlite-DBからすべてのタイムゾーンを除いたエントリを削除しました。だから今、彼らは残りのエントリは、このような日付フィールドを持っている:djangoを照会するときのタイムゾーンはあまりありません

2016年9月4日13:28:16 + 00

私は今、私のこのようなクエリを実行します。私は受信

result = Feedentry.objects.filter(date_published__gt=timezone('Europe/Berlin').localize(datetime(2016, 8, 31, 17))) 

ファーストをすぐに私は結果(またはLEN(結果))にアクセスしたいとエラーなし、私は次のエラーが表示されます。それを解決するためにどのように任意のアイデア

raise ValueError('Not naive datetime (tzinfo is already set)') 

または私が間違って何をしましたか?

答えて

1

Djangoはdatatimesを常にUTCで保存します。そして、SQLiteの中にそれdoesn't store any timezone information at all

[Databases other than PostgreSQL] store datetimes without time zone information. If you switch from USE_TZ = False to USE_TZ = True , you must convert your data from local time to UTC – which isn’t deterministic if your local time has DST.

だから、最初のあなたのデータベースを通過し、UTCへのすべての値を変換する必要があります。さもなければ、Djangoは値を正しく解釈しません。

pytz.timezoneとナイーブdatetimeを使用している場合は比較してください。しかし、エラーメッセージは、localize()に渡しているdatetimeがすでにタイムゾーンに対応していることを示しています。タイムゾーン対応のdatetimeを変換するには、pytz documentationに記載されているように、datetime.astimezone()を使用する必要があります。

+0

クイック返信ありがとうございます。私のpostgresql-DBでは上記のコードを使用しますが、テスト環境ではdatetime.asttimezone()関数を使用する必要があります。あなたの視点からコードラインを私に提供してもらえますか?ありがとうございました!!! – Kev

+0

@Kev:本当にエラーを追跡するには、完全なトレースバックを質問に追加する必要があります。 –

+0

ありがとうKevin - それは私を助けてくれました。私は今、私のSqliteのDBの列からタイムゾーンを置き換えていたとasdesired(自分のサーバー上で私のPostgreSQLのために同じ) – Kev

関連する問題