如何将 Django DateTimeField 默认为 utcnow() + 1 天?

Saq*_*Ali 0 python django django-models

我有一个看起来像这样的 Django 对象:

from datetime import timedelta

class MyObject:
    startTime = models.DateTimeField(default=datetime.datetime.utcnow)
Run Code Online (Sandbox Code Playgroud)

现在我想向这个模型添加一个名为 expiredTime 的字段,它会在 startTime 之后自动设置为 1 天。显然这行不通:

    expiredTS = models.DateTimeField(default=datetime.datetime.utcnow + timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)

那么我该怎么做呢?

Mar*_*ers 5

使用函数生成默认值:

from datetime import datetime, timedelta

def utc_tomorrow():
    return datetime.utcnow() + timedelta(days=1)

class MyObject:
    startTime = models.DateTimeField(default=datetime.utcnow)
    expiredTS = models.DateTimeField(default=utc_tomorrow)
Run Code Online (Sandbox Code Playgroud)

每次需要默认值时,都会default调用可调用对象;每次utc_tomorrow调用该函数时,都会执行该表达式,并在未来的某一天生成一个新的 datetime 对象。

对于 1.7 之前的 Django 版本,您也可以lambda为此使用 a ,但迁移序列化的更改现在需要一个全局对象。