0
我有時間日誌條目,當我保存條目時,我想自動將上一條記錄的end_time設置爲已編輯記錄的start_time,因爲不應該有任何間隔。重寫保存,保存另一個實例
class LogEntry(models.Model):
start_time = models.DateTimeField(null=True, blank=True)
end_time = models.DateTimeField(null=True, blank=True)
...
@property
def previous_entry(self):
user_previous_records = LogEntry.objects.filter(driver=self.driver, start_time__lt=self.start_time)
previous_entry = user_previous_records.latest('start_time')
return previous_entry
def save(self, *args, **kwargs):
print('checking previous entry, which is id %s' % self.previous_entry.id)
if self.previous_entry.end_time != self.start_time:
print('saving endtime of ' + str(self.previous_entry.id) + ' to ' + str(self.start_time))
self.previous_entry.end_time = self.start_time
self.previous_entry.save()
print('endtime of ' + str(self.previous_entry.id) + ' is now ' + str(self.previous_entry.end_time))
else:
print('previous end_time is the same as start_time')
super(LogEntry, self).save(*args, **kwargs)
會發生什麼情況是上一個條目沒有保存。這裏有3個打印語句,前兩個打印語句是預期的。 previous_entry
是正確的,它正確地表示它將把前一個條目的end_time設置爲正確的start_time。
然而,self.previous_entry.save()
線之後,下一個打印聲明說,該紀錄沒有得到更新(說像the endtime of 4 is now None
而不是更新DateTime對象,它說,它被保存到。
任何想法,爲什麼這個保存不起作用嗎?我認爲它與嵌套保存有關,但是我找不到任何有關爲什麼不起作用的文檔。當我在shell中運行類似的代碼時,它的工作原理如下: