// 更新
原帖下的评论让我思考。我想这是迄今为止最好的解决方案:
from datetime import datetime, timedelta
class MyModel(models.Model):
mydate = models.DateTimeField(default=datetime.now()+timedelta(days=30))
// 2. 更新
如果你想定义一个模型属性来保存应该添加的天数,你将需要覆盖 save 方法。到目前为止,我想不出更简单的方法。
解决方案:
class MyModel(models.Model):
mydate = models.DateTimeField(editable=False)
daysadded = models.IntegerField()
def save(self):
from datetime import datetime, timedelta
d = timedelta(days=self.daysadded)
if not self.id:
self.mydate = datetime.now() + d
super(MyModel, self).save()
作为 BeingGuru 已经建议您应该覆盖您的模型保存方法。
示例:
class MyModel(models.Model):
mydate = models.DateTimeField(auto_now_add=True)
def save(self):
from datetime import timedelta
d = timedelta(days=30)
// only add 30 days if it's the first time the model is saved
if not self.id:
// not saving the model before adding the timedelta gave me errors
super(MyModel, self).save()
self.mydate += d
// final save
super(MyModel, self).save()
这对我来说不是最好的方法,因为您必须保存模型两次。但是使用 auto_now_add 需要您在创建 mydate 的日期时间实例之前先保存模型。
另一种只需要保存一次的方法:
class MyModel(models.Model):
mydate = models.DateTimeField(editable=False) // editable=False to hide in admin
def save(self):
from datetime import datetime, timedelta
d = timedelta(days=30)
// only add 30 days if it's the first time the model is saved
if not self.id:
self.mydate = datetime.now() + d
super(MyModel, self).save()
希望有所帮助!