我有一个数据库表。某些数据库项目可由用户编辑,但一次只能有一个用户编辑表格内容,如果用户未完成编辑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小时检查?
答案 0 :(得分:3)
您需要locked_at
时间字段和locked_by
字段。
每次有人加载编辑页面时,请使用locked_at
和locked_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