Django:model对象保存时datetime.now()时间不一致
上面是我在管理界面看到的一个表格,数据是按照id
的降序排列的,也就是说最新的记录在最上面。下面是我用来创建模型对象并保存数据的方法。
notification = Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now())
notification.save()
所有插入到这个表Notification
的数据都是通过不同的post_save
信号处理器来完成的。这会导致一些不一致的情况吗?
我在使用django 1.3.2时设置了TIME_ZONE = 'GMT'
。我可以尝试在模型中使用auto_now_add=True
这个选项,但在此之前我想先了解一下为什么会出现这种情况。
3 个回答
1
我觉得这是因为Python的运行环境处理方式的问题,希望有人能再解释一下。你提到的auto_add_now=True应该就是解决办法。
2
在定义模型的时候,不应该直接使用datetime.now()来初始化。这会导致某种“缓存”datetime.now的情况。
不要这样做:
Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now())
应该使用下面的方式:
Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now)
5
auto_now_add
这个方法其实不太好,最好不要用。最好的做法是设置一个默认值:
from django.utils import timezone
date_created = models.DateTimeField(default=timezone.now)
django.utils.timezone
会根据你的时区设置来存储日期和时间。
注意到 timezone.now
后面没有 ()
,这是因为我们要把一个可调用的对象传给模型,这样每次保存新实例的时候它才会被调用。如果加上括号,它只会在 models.py
加载的时候被调用一次。这个 问题 详细解释了这个情况。