如何将Django DateTimeField默认设置为utcnow() + 1天?
我有一个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
来实现这个功能,但由于迁移序列化的变化,现在需要一个全局对象。