Я пытаюсь заполнить last_version_date
из поля modified
, установленного с помощью auto_now
. В моем методе сохранения, если создается новая версия, я хочу сохранить измененную дату для этой записи.
Упрощенный пример:
class Poll(models.Model):
question = models.CharField(max_length=200)
modified = models.DateTimeField(auto_now=True)
version = models.IntegerField(blank=False, default=1)
last_version_date = models.DateTimeField(auto_now_add=True,blank=False)
def save(self, keep_history=False, *args, **kwargs):
if keep_history:
self.last_version_date = self.modified
self.version = self.version + 1
return super(Poll, self).save(*args, **kwargs)
использование
>>> p = Poll.objects.create(question = 'Test1')
>>> p.save()
>>> p.modified
datetime.datetime(2014, 8, 18, 6, 50, 41, 820000, tzinfo=<UTC>)
>>> p.last_version_date
datetime.datetime(2014, 8, 18, 6, 50, 38, 381000, tzinfo=<UTC>)
>>> p.created
datetime.datetime(2014, 8, 18, 6, 50, 38, 380000, tzinfo=<UTC>)
>>>
>>>
>>> p.save(True)
>>> p.modified
datetime.datetime(2014, 8, 18, 6, 51, 1, 804000, tzinfo=<UTC>)
>>> p.last_version_date
datetime.datetime(2014, 8, 18, 6, 50, 41, 820000, tzinfo=<UTC>)
Обратите внимание, как во втором сохранении last_version_date
обновляется с предыдущим значением modified
.
Глядя на источник для параметра auto_now
DateTimeField
, я вижу, что он заполняется в хуке pre_save
, поэтому я ожидаю, что значение будет заполнено до сохранения.
Спасибо.