Django - 模型创建以来的时间

时间:2015-06-27 18:07:02

标签: python django datetime timedelta

你如何计算自模型创建以来的时间?该模型具有以下字段:

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块,我根本不会得到任何输出。

有人有任何想法吗?

2 个答案:

答案 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版本,也许源代码已被修改。