我有一个@property
在我的django模型打印出True
或False
基于日期时间差。尽管它在单元测试时可以工作,但我得到了错误
TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date'
class MyModel(models.Model):
...
created_at = models.DateTimeField(auto_now_add=True)
@property
def is_expired(self):
if datetime.now(tz=utc) - self.created_at > timedelta(hours=48):
return True
return False
如何解决这个问题?我查的每个答案都帮不了我。
回溯错误正在向您解释问题:
不支持-:'datetime '的操作数类型。Datetime '和' Datetime .date'
这表示您不能从datetime.date
中减去datetime.datetime
。在您的情况下,self.created_at
似乎是date
,但您使用datetime.now()
和timedelta()
表明您真正想要处理datetime
s。
- 确保
created_at
是datetime
,或者 - 将
datetime.now()
改为date.today()
,将timedelta(hours=48)
改为timedelta(days=2)
它们的行为略有不同,因此根据物品是在两个日历日后到期还是在48小时内到期来选择一个。