如何计算创建模型后的时间?该模型具有以下字段:
created_at = models.DateTimeField(auto_now_add=True)
这就是我尝试的:
from datetime import datetime, timedelta
@property
def time_since_created(self):
return (datetime.now()-self.created_at).total_seconds()
我不明白的是,它崩溃时没有给我任何错误消息。如果我把它包装在这样的try/except块中:
@property
def time_since_created(self):
try:
return (datetime.now()-self.created_at).total_seconds()
except Exception as e:
try:
print("Error:" + e)
except:
print("Error: An exception occured when trying to print exception")
我将得到的错误是"Error: An exception occured when trying to print exception"
。如果我不包括最后一个try/catch块,我就不会得到任何输出。
有人有什么想法吗?
我试图自己做同样的操作,但我遇到了错误:
can't subtract offset-naive and offset-aware datetimes
这是因为datetime.now()
是幼稚的,而self.created_at
是有意识的时间。所以尝试使用timezone.now()
:
from django.utils import timezone
@property
def time_since_created(self):
return (timezone.now()-self.created_at).total_seconds()
编辑:重新发布django解决方案
在这里查看了以前的stackoverflow帖子和其他一些帖子之后。他们建议不要使用auto_now_add
,而是添加default
参数作为格式。
created_date = models.DateTimeField(default=datetime.now())
我认为这可能是格式问题,这应该可以解决这个问题。很抱歉我之前的回答。
编辑:在检查了这里的django源代码后,auto_now_add
arg似乎应用了
value = datetime.datetime.now().time()
以建模实例。
在我的测试中,如果我用datetime.now().time()
"减去"这个值,它就会弹出
TypeError: unsupported operaand type(s) for -: 'datetime.datetime' and 'datetime.time'
但我不确定你的django版本,也许源代码已经被修改了。