Python 减去Django中的日期时间-无输出
我想在Django应用程序中获取用户帐户的“年龄”。这就是我所做的:Python 减去Django中的日期时间-无输出,python,django,python-2.7,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 (
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;
类用户数据(models.Model):
user=models.ForeignKey(user,unique=True)
出生=models.IntegerField(默认值=1900)
性别=models.CharField(最大长度=1)
@财产
def是新的(自我):
如果(datetime.datetime.now()-self.user.date_加入)
在我的模板中,根据此函数的输出有不同的视图。但基本上没有产出
当简单地“打印”输出时,没有返回任何内容。返回“日期时间”和“加入日期”时,会显示日期。当返回str(type())时,将同时返回“datetime.datetime”。但当返回差异(或差异类型)时,绝对不会返回任何内容。在python控制台中执行相同操作时,会返回一个timedelta,这正是我所期望的
你知道下一步在哪里搜索吗?我不知道发生了什么事情,完全阻止此功能在不破坏应用程序的情况下提供任何输出。您只需执行以下操作:
@property
def isNew(self):
return (
datetime.datetime.now() - self.user.date_joined <
datetime.timedelta(days=40)
)
作为属性的第一行,所以它总是返回false
此外,您不应该在python中使用分号,因为您试图减去offset naive和offset aware日期时间 您需要安装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)
导入日期时间,pytz
@财产
def是新的(自我):
返回pytz.utc.localize(datetime.datetime.now())-self.user.date\u
您能给我们看看您的型号吗?我现在就添加了完整的型号;)只是为了测试而添加了它,但在我的帖子中忘记了删除它-这解决了问题-非常感谢。为什么在这个上下文中会使用不同类型的日期时间?您有offset aware和offset naive datetime。使用datetime.datetime.now()时,应用程序不知道要使用哪个时区。更多信息请点击此处:
import datetime, pytz
@property
def isNew(self):
return pytz.utc.localize(datetime.datetime.now())-self.user.date_joined < datetime.timedelta(days=40)