2010-11-05 42 views
1

有人知道如何在Django中讀取/寫入原子布爾字段嗎?我試圖做到以下幾點:Django原子布爾值

我在名爲email_sent的模型中有一個字段。每當我從我們的付款處理器收到即時付款通知(IPN)時,我都想發送通知電子郵件。由於我收到多個通知,並且我只想發送一封收據電子郵件,因此我(現在)只需在模型中使用支票來檢查是否已收到收據電子郵件。然而,有時候,我爲同一個用戶同時獲得多個IPN。我不想發送多封電子郵件,但下面的代碼引入了競爭條件:

if purchase.email_sent: 
    self.send_email() 
    purchase.email_sent = True 
purchase.save() 

這顯然是不正確的做法,但你如何實現一個原子的讀/一個布爾字段寫入(PostgreSQL的)?我知道有2種方法來解決這個: 1)使用一個計數器,做一個更新() 2)使用原子memcached的操作

1和2都顯得醜陋的黑客不應該是必要的。任何想法和/或我是否缺少明顯的東西?

謝謝!

回答

0

不要立即發送通知。排隊所有通知並使用後臺進程發送它們。

+0

不錯,但這是一種解決方法,並不直接回答問題。我也懷疑這個功能是否存在,儘管我不確定「原子」變量的概念是否適用於解釋型語言。 – jMyles 2010-11-05 23:44:07

+0

@Justin Myles Holmes:任何其他解決方案都會涉及某種共享鎖,這些鎖可能會比我的建議更危險,也更不優雅。如果Django中的某些東西看起來很難,那麼你可能走錯了路。 – 2010-11-05 23:59:14

+0

好主意Paulo,謝謝!我仍然想知道:有可能自動增加數據庫中的計數器,所以爲什麼不讀/切換布爾值?它似乎不是一個非常深奧的用例。 – Dick 2010-11-06 04:52:34