datetime.now()不准确

时间:2014-12-02 05:56:38

标签: django datetime digital-ocean

我有一个Django应用程序,它自动将timezone.now()值作为模型中的字段。当我在localhost上运行它时,它按预期工作。但是,当我将其部署到Digital Ocean时,timezone.now()获取我开始运行服务器时的值。为什么会发生这种情况?我该如何解决这个问题?

更正:django' s timezone.now()

2 个答案:

答案 0 :(得分:5)

代码会有所帮助。

据推测,您使用此作为字段的default参数。问题是你已经这样做了:

my_field = models.DateField(default=datetime.datetime.now())

由于Python的工作方式,在类定义时评估 - 即进程启动时。相反,您应该传递 callable

my_field = models.DateField(default=datetime.datetime.now)

即没有调用括号,Django将知道在实例化时调用它。

答案 1 :(得分:1)

我相信这是因为它缓存了运行该方法的结果,而不是每次调用它时再次运行它,因为我在Ruby on Rails中遇到过这种情况。在您的本地环境中,缓存可能没有打开,因为这会让开发变得烦人。在Ruby中,您可以将方法调用包装在lambda中,我认为它也适用于Python,但我还没有尝试过。