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

时间:2014-08-02 19:41:55

标签: python django django-models

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

from datetime import timedelta

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

现在我想在此模型中添加一个名为expiredTime的字段,该字段自动设置为startTime后的第1天。显然这不起作用:

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

那我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

使用函数生成默认值:

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 callable;每次调用utc_tomorrow函数时,都会执行表达式,并在将来的某一天生成一个新的日期时间对象。

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