我想为数据模型设置timedelta
class ActivateCode(models.Model):
""" """
user = models.ForeignKey(User, on_delete=models.CASCADE)
code = models.CharField(max_length=100)
date_expired = models.DateTimeField(default=datetime.now + timedelta(days=1))
这似乎不是一个正确的解决方案,因为未调用 datetime.now
而是调用了 timedetla(days=1)
。
遇到这样的问题该如何处理?
最佳答案
简而言之:我们可以创建一个函数来计算第二天。
我们无法添加带有 timedelta(..)
的函数对象,因为该函数也没有 __add__
方法,也不是 timedelta
对象有一个 __radd__
添加功能的方法和 timedelta
s 在一起,因此 Python/Django 无法使用此语法构造新函数。
但是,我们可以通过创建一个计算默认时间的函数来解决这个问题:
<b>def tomorrow():
return datetime.now() + timedelta(days=1)</b>
class ActivateCode(models.Model):
""" """
user = models.ForeignKey(User, on_delete=models.CASCADE)
code = models.CharField(max_length=100)
date_expired = models.DateTimeField(default=<b>tomorrow</b>)
我们这里不调用我们设置为default=...
的函数,我们只传递对我们的 tomorrow
的引用函数,这样如果 Django 创建一个新对象,它将调用 tomorrow(..)
函数,从而精确计算第二天。
关于python - 处理timedelta()和datetime.now,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50652057/