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()