Django - 自模型创建以来的时间
Django - Time since model created
你如何计算自创建模型以来的时间?该模型具有以下字段:
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 块,我根本不会得到任何输出。
有人有什么想法吗?
编辑:重新post for django 解决方案
检查之前的 Whosebug post here 和其他一些 post。他们建议不要使用 auto_now_add
,而是添加 default
参数作为格式。
created_date = models.DateTimeField(default=datetime.now())
我想可能是格式问题,这应该可以解决。
抱歉我之前的回答。
编辑:
检查 django 源代码 here 后,auto_now_add
arg 似乎适用
value = datetime.datetime.now().time()
到模型实例。
并且在我的测试中,如果我 "minus" 这个值与 datetime.now().time()
,它弹出
TypeError: unsupported operaand type(s) for -: 'datetime.datetime' and 'datetime.time'
但是我不确定你的django版本,可能是源代码被修改了。
我尝试自己做同样的操作,但出现错误:
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()
你如何计算自创建模型以来的时间?该模型具有以下字段:
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 块,我根本不会得到任何输出。
有人有什么想法吗?
编辑:重新post for django 解决方案
检查之前的 Whosebug post here 和其他一些 post。他们建议不要使用 auto_now_add
,而是添加 default
参数作为格式。
created_date = models.DateTimeField(default=datetime.now())
我想可能是格式问题,这应该可以解决。 抱歉我之前的回答。
编辑:
检查 django 源代码 here 后,auto_now_add
arg 似乎适用
value = datetime.datetime.now().time()
到模型实例。
并且在我的测试中,如果我 "minus" 这个值与 datetime.now().time()
,它弹出
TypeError: unsupported operaand type(s) for -: 'datetime.datetime' and 'datetime.time'
但是我不确定你的django版本,可能是源代码被修改了。
我尝试自己做同样的操作,但出现错误:
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()