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

0 投票
1 回答
2888 浏览
提问于 2025-04-18 15:45

我有一个Django对象,长得像这样:

from datetime import timedelta

class MyObject:
    startTime = models.DateTimeField(default=datetime.datetime.utcnow)

现在我想给这个模型添加一个叫做expiredTime的字段,它的值应该自动设置为startTime之后的一天。显然,这样做是行不通的:

    expiredTS = models.DateTimeField(default=datetime.datetime.utcnow + timedelta(days=1))

那我该怎么做呢?

1 个回答

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)

每当需要默认值的时候,就会调用这个 default 可调用对象;每次调用 utc_tomorrow 函数时,表达式都会被执行,从而生成一个新的日期时间对象,这个对象代表的是未来的一天。

在Django 1.7之前的版本中,你也可以使用 lambda 来实现这个功能,但由于迁移序列化的变化,现在需要一个全局对象。

撰写回答