2017-02-19 19 views
0

我刪除了我的Sqlite-DB中的所有時區初始條目。所以現在他們剩餘的條目有這樣的的DateField:查詢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始終以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,您需要使用datetime.astimezone(),如pytz documentation中所述。

+0

感謝您的快速回復。所以我正確的,如果我使用上面的代碼爲我的postgresql-DB,但爲測試環境我需要使用datetime.asttimezone()函數使日期時間字段timesone天真?我可以請你給我提供代碼行,因爲它應該從你的觀點來看?謝謝!!! – Kev

+0

@Kev:要真正追蹤錯誤,您應該將完整的追溯添加到您的問題中。 –

+0

感謝凱文 - 它幫了我很多。我現在已經從我的Sqlite-DB中的列中替換了時區,它的工作原理與我的服務器上的Postgresql相同 – Kev