// Обновление
Комментарий под оригинальным постом заставил меня задуматься. Я думаю, что это лучшее решение на данный момент:
from datetime import datetime, timedelta
class MyModel(models.Model):
mydate = models.DateTimeField(default=datetime.now()+timedelta(days=30))
// 2. Обновление
Если вы хотите определить атрибут модели, который содержит количество дней, которые должны быть добавлены, вам необходимо переопределить метод сохранения. До сих пор я не мог придумать более простой способ.
Решение:
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()
Как уже упоминалось в Guru, вы должны переопределить метод сохранения ваших моделей.
* * Пример тысячи двадцать-одина: * ** 1023 тысячу двадцать две *
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 требует от вас сохранения модели перед созданием экземпляра datetime для 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()
Надеюсь, это помогло!