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

回答

1

previous_entry一个计算出来的属性,你不能像这样设置它的值。 你应该怎么做,是这样的:

previous_entry = LogEntry.objects.get(id=self.previous_entry.id) 
self.previous_entry.end_time = self.start_time 
self.previous_entry.save()