django时区设置更改不会影响模型

时间:2014-12-24 21:35:53

标签: python django shell django-1.7

我有django 1.7.x项目。我通过shell插入了新数据,如下所示:

from polls.models import Question, Choice
from django.utils import timezone

q = Question(question_text = "What's new?", pub_date = timezone.now(), status = True)
q.save()
q.pub_date

但是,我发现日期设置为UTC。因此,在项目设置中,我将时区更改为TIME_ZONE = 'Africa/Cairo'。但是,通过manage shell q.pub_date = timezone.now()通过{{1}}更新项目shell的记录不会将记录的时区更改为新记录。它比我的开发计算机少两个小时,开罗时区和UTC之间的差异。我能错过什么?

1 个答案:

答案 0 :(得分:5)

来自the documentation

  

请注意,now()将始终以UTC为单位返回时间,而不管TIME_ZONE的值是多少;您可以使用localtime()转换为当前时区的时间。

但请注意,Django始终以UTC格式存储日期时间,因此即使您使用localtime()进行转换,它也不会影响值的存储方式。所以q.pub_date将是UTC或在数据库(而不是Django)设置中定义的时区。

但重要的是如何向用户呈现日期时间,以及timezone documentation中描述的控制方式。