2017-02-19 18 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