你如何计算自模型创建以来的时间?该模型具有以下字段:
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块,我根本不会得到任何输出。
有人有任何想法吗?
答案 0 :(得分:1)
我试图自己做同样的动作,但我有错误:
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()
答案 1 :(得分:-2)
修改:重新发布django解决方案
检查上一次stackoverflow帖子here和其他帖子后。他们建议不要使用auto_now_add
,而是将default
参数添加为格式。
created_date = models.DateTimeField(default=datetime.now())
我认为这可能是格式问题,这应该解决这个问题。 抱歉我之前的回答。
修改强>:
检查django源代码here后,auto_now_add
arg似乎适用
value = datetime.datetime.now().time()
建模实例。
在我的测试中,如果我用datetime.now().time()
“减去”此值,则会弹出
TypeError: unsupported operaand type(s) for -: 'datetime.datetime' and 'datetime.time'
但是我不确定你的django版本,也许源代码已被修改。