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中运行类似的代码时,它的工作原理如下: