2016-01-20 56 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()