繁体   English   中英

Django:datetime.now()模型对象保存中的时间不一致

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM