Django - 如何实现锁定数据

时间:2012-03-08 03:09:58

标签: python django

我有一个数据库表。某些数据库项目可由用户编辑,但一次只能有一个用户编辑表格内容,如果用户未完成编辑2小时后,其他用户可以编辑该表格。我怎么能这样做?

表格如下:

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小时检查?

1 个答案:

答案 0 :(得分: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