我有一个Django应用程序,它自动将timezone.now()值作为模型中的字段。当我在localhost上运行它时,它按预期工作。但是,当我将其部署到Digital Ocean时,timezone.now()获取我开始运行服务器时的值。为什么会发生这种情况?我该如何解决这个问题?
更正:django' s timezone.now()
答案 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,但我还没有尝试过。