[英]Django: datetime.now() time inconsistency in model object save
以上是我在admin界面中的一个表,以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
选项,但在此之前只想知道为什么会发生这种情况。
auto_now_add
不是一个好方法。 避免使用它。 最好的方法是使用set default value:
from django.utils import timezone
date_created = models.DateTimeField(default=timezone.now)
django.utils.timezone
将根据您的时区设置存储日期时间。
注意timezone.now
之后的missing ()
,因为我们将一个callable传递给模型,每次保存一个新实例时都会调用它。 使用括号,仅在加载models.py
时调用一次。 这个问题更详细地阐明了这个问题。
在定义模型时,不应初始化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)
我相信这是由于Python的运行时环境处理方式所致,希望有人可以对此进行重申。 auto_add_now = True应该是您建议的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.