Python heroku应用程序中新对象的时间戳设置为heroku';s服务器启动时间,而不是实际utcnow时间
我在heroku上有一个应用程序为新对象设置了不正确的时间戳。我不明白为什么,为了我的生命 发生了什么:Python heroku应用程序中新对象的时间戳设置为heroku';s服务器启动时间,而不是实际utcnow时间,python,django,postgresql,heroku,Python,Django,Postgresql,Heroku,我在heroku上有一个应用程序为新对象设置了不正确的时间戳。我不明白为什么,为了我的生命 发生了什么: 我正在heroku run网站上提交一份表格 Django视图创建新对象并保存 models.py具有“ts=models.DateTimeField(默认值=datetime.now(utc)),因此它应该在提交时保存utc时间戳(在本地保存),但在heroku上,它保存服务器启动时的时间戳 Models.py: class NewsArticle(models.Model): l
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)
Views.py:
news_article = NewsArticle(...)
news_article.save()
print news_article.ts
print datetime.now(utc)
import sys
sys.stdout.flush()
heroku日志中相应的输出(我在UTC 22:00:34重新启动了heroku服务器):
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
显然,datetime.now(utc)调用在models.py中发生了错误,但我不确定原因。有人有主意吗?您的问题可能在于如何设置默认值。以下两组代码相同:
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)
我的猜测是,它与此相关:-因此,每个实例启动时都不会挂起,并且您必须明确地让它获得时间…啊,您是对的。这就解决了问题。谢谢。不能说我很快就能得到。
def get_utc_now():
return datetime.now(utc)
MyModel
...
ts = models.DateTimeField(default = get_utc_now)