2015-07-28 23 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隔離級別。)