2012-03-08 33 views
0

我有一個數據庫表。一些數據庫項目可以由用戶編輯,但是一次只能有一個用戶編輯表格內容,如果用戶在2小時後還沒有完成編輯,其他用戶可以編輯表格。我怎樣才能做到這一點?Django - 如何實現鎖定數據

表是這樣的:

class NodeRevision(BaseModel, NodeContent): 
    node  = models.ForeignKey(Node, related_name='revisions') 
    summary = models.CharField(max_length=300) 
    revision = models.PositiveIntegerField() 
    revised_at = models.DateTimeField(default=datetime.datetime.now) 
    suggested = models.BooleanField(default=False) 
    suggest_status = models.CharField(max_length=16,default="") 

我應該添加一個BooleanField到它,比如editing_locked=models.BooleanField(default=False)?或者是其他東西?我怎麼能實施2小時的檢查?

回答

3

您需要一個locked_at時間字段和locked_by字段。

每次有人加載編輯頁面時,請使用locked_atlocked_by信息更新數據庫。

要實現2小時限制,我只需要在用戶請求權限(而不是輪詢/更新模型)時計算結果。當用戶嘗試編輯模型時,請檢查locked_by/locked_at並返回一個布爾值,無論用戶是否可編輯該布爾值。

def can_edit(self, user): 
    if user == self.locked_by: 
     return True 
    elif self.locked_at and (self.locked_at - datetime.datetime.now()).total_seconds > 2*60*60: 
     return True 
    return False 
+0

謝謝,我會試一試。我想實現提示改進功能,如stackoverflow。你知道,如果你正在改進一個建議,有人可以接受它,當你正在提高編輯,所以,我不知道如何實現它的計算器。 – mike 2012-03-08 10:00:31