2014-12-02 111 views
0

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

更正:Django的timezone.now()

回答

1

我相信这是因为它的缓存运行的方法,而不是每次被称为时间再运行它,因为我已经在Ruby中运行这个结果轨。在您的本地环境中,缓存可能无法启用,因为这会对开发造成影响。在Ruby中,您可以将方法调用包装在一个lambda中,我认为它也可以在Python中工作,但我没有尝试过。

4

代码会有帮助。

大概你用这个作为字段的default参数。问题是,当你这样做:

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

其中,由于道路Python的作品,在上课的时候是定义评估 - 即进程启动时。相反,你应该通过调用

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

说,是没有调用括号,和Django会知道调用它的实例。

+0

我会看看,但为什么在本地机器上运行服务器不会造成问题,而是远程服务器呢? – Contechtions 2014-12-02 10:09:19

+0

它的确如此,但在本地机器上,您始终都会重新启动开发服务器 - 只要您的代码发生更改,它就会自动重新启动。如果您让开发者服务器运行了一天以上,并且没有更改代码,您会看到同样的情况。 – 2014-12-02 10:27:30

+0

很好的答案。这就是为什么我更喜欢使用auto_now_add参数:created_at = models.DateTimeField(auto_now_add = True) – 2014-12-02 15:36:55