2012-03-08 95 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