2009-01-21 44 views
2

我想找到一種通用的方式來防止保存對象,如果它檢出後保存。如何防止覆蓋別人已修改的對象

我們可以假設對象有一個timestamp字段,其​​中包含上次修改時間。如果我已經檢出(例如使用ModelForm訪問了一個視圖)t1並且對象再次保存在t2,因爲t2>t1我不應該保存它。

+0

你想防止自己從做什麼?爲什麼不把它保存兩次? – nosklo 2009-01-21 21:48:44

+0

在這裏看:http://stackoverflow.com/questions/320096/django-how-can-i-protect-against-concurrent-modification-of-data-base-entries – tvanfosson 2009-01-21 22:07:31

回答

3

覆蓋的保存方法,將首先檢查最後的時間戳:

def save(self): 
    if(self.id): 
     foo = Foo.objects.get(pk=self.id) 
     if(foo.timestamp > self.timestamp): 
      raise Exception, "trying to save outdated Foo" 
    super(Foo, self).save()