0

我在 heroku 上有一个应用程序,它为新对象设置了不正确的时间戳。我无法弄清楚为什么我的生活。

发生了什么:

  1. 我正在 heroku-run 网站上提交表格。

  2. Django 视图创建新对象并保存

  3. models.py 有“ ts = models.DateTimeField(default = datetime.now(utc)) ”所以它应该在提交时保存 utc 时间戳(它在本地执行),但在 heroku 上它保存服务器启动时的时间戳.

模型.py:

class NewsArticle(models.Model):
    link = models.URLField(max_length = 2000)
    title = models.CharField(max_length = 300)
    img_path = models.CharField(null = True, max_length = 300)
    ts = models.DateTimeField(default = datetime.now(utc))
    user = models.ForeignKey(User)
    hostname = models.CharField(max_length = 300)
    deleted = models.BooleanField(default = False)

视图.py:

news_article = NewsArticle(...)
news_article.save()

print news_article.ts
print datetime.now(utc)
import sys
sys.stdout.flush()

heroku 日志中的相应输出(我在 22:00:34 UTC 重新启动了 Heroku 服务器):

2013-01-02T22:01:56+00:00 app[web.1]: 2013-01-02 22:00:34.746547+00:00
2013-01-02T22:01:56+00:00 app[web.1]: 2013-01-02 22:01:56.919520+00:00

15分钟后又一次:

2013-01-02T22:15:46+00:00 app[web.1]: 2013-01-02 22:00:34.746547+00:00
2013-01-02T22:15:46+00:00 app[web.1]: 2013-01-02 22:15:46.489815+00:00

显然,models.py 中发生的 datetime.now(utc) 调用有问题,但我不知道为什么。有人有想法吗?

4

1 回答 1

2

您的问题可能在于您如何设置默认值。以下两组代码相同:

now_at_import = datetime.now(utc)
MyModel
  ...
  ts = models.DateTimeField(default = now_at_import)

#is exactly the same as
MyModel
  ...
  ts = models.DateTimeField(default = datetime.now(utc))

你想要的是:

def get_utc_now():
  return datetime.now(utc)


MyModel
  ...
  ts = models.DateTimeField(default = get_utc_now)
于 2013-01-02T22:41:55.910 回答