在Django中减去日期时间 - 没有输出

时间:2015-05-15 11:56:46

标签: python django python-2.7

我希望得到"年龄"我的Django应用程序中的用户帐户。这就是我所做的:

class UserData(models.Model):
    user = models.ForeignKey(User,unique=True)
    birth = models.IntegerField(default=1900)
    gender = models.CharField(max_length=1)

    @property
    def isNew(self):
        if (datetime.datetime.now()-self.user.date_joined) < datetime.timedelta(days=40):
            return True;
        else:
            return False;

在我的模板中,根据此函数的输出,有不同的视图。但基本上没有输出。

当简单地&#34;打印&#34;那里的输出根本没有返回。返回&#34; datetime&#34;和#34; date_joined&#34;日期显示。当返回&#34; datetime.datetime&#34;的str(type())时退回。但是当返回差异(或差异的类型)时,绝对没有返回。在我的python控制台中执行相同操作时,会返回timedelta - 正是我所期望的。

知道接下来要去哪里搜索?我无法弄清楚发生了什么,以完全阻止此功能在不崩溃应用的情况下提供任何输出。

2 个答案:

答案 0 :(得分:1)

您正试图减去偏移天真和偏移感知日期时间。

您需要安装pytz pip install pytz并使用以下内容更改您的方法:

import datetime, pytz

@property
def isNew(self):
    return pytz.utc.localize(datetime.datetime.now())-self.user.date_joined < datetime.timedelta(days=40)

答案 1 :(得分:0)

您可以这样做:

@property
def isNew(self):
    return (
        datetime.datetime.now() - self.user.date_joined < 
        datetime.timedelta(days=40)
    )

代码中的问题是

return False

作为你的财产的第一行,所以它总是返回false。

此外,你不应该在python中使用分号