2012-08-14 39 views
3

我學習的Django,努力保持我的費用軌道做會計的應用程序等。如何用django更新會計應用程序的餘額?

我有兩個型號,一個賬戶,一個用於操作創建的數據庫。 但我不知道如何保持我的平衡與每個操作更新。

我想也許,每次我保存新的操作,我更新由超控操作模式的保存方法的平衡?但是在這種情況下,如果我犯了一個錯誤並且必須刪除一個操作,那麼我的餘額將不會被更新,對吧?

我想我也可以創建一個BalanceHistory模型,所有結餘的歷史,但在刪除操作的情況下,那麼同樣的問題..

我看到的最好的辦法是每次動態更新我的平衡我想以顯示它,將所有的操作在那個時候..但我不明白我怎麼能做到這一點..

因此,如果任何人有關於一些見解,那將是巨大的。 我知道這不是一個純粹的與Django有關的問題,但是因爲我正在使用Django,所以如果我可以使用Django功能找到想法會更好!

在此先感謝您的時間和您的幫助!

+2

向我們展示一些代碼,也許?和你期望它做什麼... – Jingo 2012-08-14 16:36:42

回答

3

你說的沒錯,這是有難度的 - 沒有辦法保證精確的平衡,除了通過動態地計算它基於賬戶的整個歷史每次讀取。

如果選擇走那條路,你可以使用Django的ORM的aggregation features計算業務的總和。例如,如果你的操作有一個域名爲amount(正或負號表示平衡該操作的變化),你可以可以計算餘額,如:

Operation.objects.filter(account=my_account).aggregate(balance=Sum('amount')) 

如果你不想做無論出於何種原因,您還可以使用自定義的save方法維護運行餘額,如上所述。您可以使用,如save來處理單個項目刪除。

但是,如果您曾經用戶批量插入,更新或刪除或原始SQL操作,則該方法將導致問題,因爲這些操作不會調用savedelete方法。但是,如果您需要使用這些功能,則可以使用混合方法 - 在執行一次性事務時使用savedelete選項,並定期通過聚合觸發完全重新計算以修復錯誤或在執行完一個你知道的操作會搞砸天平。

+0

感謝您的準確答案!我想我會用聚合功能進行動態更新。似乎更靈活,更容易維護。 – Serphone 2012-08-14 18:02:36