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

时间:2013-02-05 12:26:19

标签: python django datetime django-models

enter image description here

以上是我在管理界面中的一个表格,按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 个答案:

答案 0 :(得分:4)

auto_now_add不是一个好方法。避免使用它。最好的方法是使用set default value:

from django.utils import timezone

date_created = models.DateTimeField(default=timezone.now)

django.utils.timezone将根据您的时区设置存储日期时间。

注意()之后缺少的timezone.now,因为我们将可调用的函数传递给模型,并且每次保存新实例时都会调用它。使用括号,只有在models.py加载时才会调用一次。这个question更详细地澄清了这个问题。

答案 1 :(得分:2)

在定义模型时,不应初始化datetime.now()。这导致某种“缓存”#34; 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)

答案 2 :(得分:1)

我认为这是由于Pythons运行时环境进程的方式,希望有人可以重新进行迭代。 auto_add_now = True应该是您建议的解决方案。