2015-07-28 24 views
0

我有以下状态:Django的独特如果条件

用户A“控制了”资源R的

我需要确保没有人会对R接入,直到管理员说

它确定使用它。

我现在有:

当用户采取的R控制我节省了国旗在DB。 (该标志与

的R - 如果真那么R取)

的问题是,如果用户尝试在同一第二拿到[R可以有

情况的他们都得到R(因为线程时间)。

我该如何预防?

回答

3

没有任何代码示例很难正确回答您的问题。

不过,我想你想是这样的:

num_updated = Resource.objects.filter(id=1, is_taken=False).update(is_taken=True) 
was_taken = (num_updated == 1) 

这将创建一个单独的原子数据库查询。如果is_takenFalse,它将被设置为True和返回值是1。如果资源已被使用,但是,没有行匹配,并且返回值是0。

这应该是免费比赛条件(至少,它将在PostgreSQL中使用默认的Read Committed隔离级别。)