2012-03-08 5 views
0

私はデータベーステーブルを持っています。一部のデータベース項目はユーザーが編集できますが、一度に1人のユーザーしか表の内容を編集できません。また、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="") 

は、私はそのようなediting_locked=models.BooleanField(default=False)として、それにのBooleanFieldを追加すべきか?または、他の何か?そして、私は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のような改善機能を提案する実装​​したい。あなたが知っている、あなたが提案を改善している場合は、あなたが改善編集をしているときにそれを受け入れることができるので、私はそれを実装する方法stackoverflowを知らない。 – mike

関連する問題