4

私は Django を学んでおり、経費を追跡するための会計アプリを作成しようとしています。

アカウント用と操作用の 2 つのモデルでデータベースを作成しました。しかし、操作ごとに残高を最新の状態に保つ方法がわかりません。

新しい操作を保存するたびに、操作モデルの保存方法をオーバーライドしてバランスを更新するのではないかと考えていましたか? でもその場合、操作を間違えてひとつ削除してしまうと、残高が更新されませんよね?

すべての残高の履歴を持つ BalanceHistory モデルを作成することもできると思いましたが、操作を削除した場合は同じ問題が発生します..

私が見る最良のオプションは、表示するたびに残高を動的に更新し、その時点ですべての操作を追加することです..しかし、どうすればそれができるのかわかりません..

誰かがそれについて何らかの洞察を持っているなら、それは素晴らしいことです. 純粋に Django 関連の問題ではないことはわかっていますが、私は Django で作業しているので、Django の機能を使用してアイデアを見つけることができればより良いでしょう!

お時間を割いていただき、ありがとうございました。

4

1 に答える 1

4

これには注意が必要です。アカウントの履歴全体に基づいて読み取りごとに動的に計算する以外に、正確な残高を保証する方法はありません。

そのようにすることを選択した場合は、DjangoORMの集計機能を使用して操作の合計を計算できます。たとえば、操作にamount(その操作のバランスの変化を示す正または負の数)というフィールドがある場合、次のようにバランスを計算できます。

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

なんらかの理由でそれを行いたくない場合は、説明したようにカスタムsaveメソッドを使用してランニングバランスを維持することもできます。のようなdelete方法を使用して、save個々のアイテムの削除を処理できます。

ただし、このメソッドは、一括挿入、更新、削除、または生のSQL操作を使用する場合、saveおよびdeleteメソッドを呼び出さないため、問題が発生します。ただし、これらの機能を使用する必要がある場合は、ハイブリッド方式を使用できる可能性があります。1回限りのトランザクションを実行する場合は、saveおよびdeleteオプションを使用し、定期的に集計を使用して完全な再計算をトリガーしてエラーを修正するか、操作を実行した直後にバランスを台無しにすることを知っています。

于 2012-08-14T17:32:15.710 に答える