Django默认= timezone.now + delta

时间:2014-12-15 19:04:50

标签: django django-models timezone timezone-offset

尝试在Django模型中设置密钥到期的时间戳并遇到此问题:

我目前的代码:

key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1))

上面的代码可行,但是当使用“timezone.now()”时,它会从Apache重新启动时获取时间戳,因此这不起作用。我做了一些研究,找到了问题的那一部分的解决方案,所以通过将“timezone.now()”替换为“timezone.now”,每次创建对象时我都会获得当前时间戳,这是完美的,问题部分解决了。

我在使用“timezone.timedelta(days = 1)”更改日期时遇到问题。

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

我得到的错误是:

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

TypeError:+:'function'和'datetime.timedelta'

不支持的操作数类型

目标是提前24小时设定时间戳。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:41)

default需要一个可调用的,所以你只需要编写一个函数来做你想做的事情,然后把它作为参数提供:

def one_day_hence():
    return timezone.now() + timezone.timedelta(days=1)

class MyModel(models.Model):
    ...
    key_expires = models.DateTimeField(default=one_day_hence)

(正如here所讨论的那样,抵制使其成为lambda的诱惑。)

答案 1 :(得分:0)

我正在使用Django 2.1.7,在此版本中,不需要为default编写函数。您可以通过简单地修改之前的代码来使用您的代码,

key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1))

如果您注意到()之后是timezone.now

您可以关注link,以获取有关timedelta的更多信息