4

我正在学习 Django,尝试做一个会计应用程序来跟踪我的开支等。

我用两种模型创建了数据库,一种用于帐户,一种用于操作。但我不知道如何在每次操作中保持我的余额更新。

我在想,也许每次我保存一个新操作时,我都会通过覆盖操作模型的保存方法来更新余额?但是在这种情况下,如果我犯了一个错误并且必须删除一个操作,那么我的余额将不会更新,对吗?

我想我也可以创建一个 BalanceHistory 模型,其中包含所有余额的历史记录,但在删除操作的情况下也会出现同样的问题..

我看到的最好的选择是每次我想显示它时动态更新我的余额,添加当时的所有操作..但我不知道我该怎么做..

因此,如果有人对此有所了解,那就太好了。我知道这不是纯粹与 Django 相关的问题,但由于我正在使用 Django,如果我能找到使用 Django 功能的想法会更好!

提前感谢您的时间和帮助!

4

1 回答 1

4

你说得对,这很棘手——没有办法保证准确的余额,除非根据帐户的整个历史记录在每次读取时动态计算余额。

如果您选择这样做,您可以使用 Django ORM 的聚合功能来计算操作的总和。例如,如果您的操作有一个名为amount(表示该操作余额变化的正数或负数)的字段,您可以计算余额,如下所示:

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

如果您出于某种原因不想这样做,您还可以使用save您所描述的自定义方法来保持运行平衡。您可以使用类似处理单个项目删除的delete方法。save

但是,如果您曾经使用批量插入、更新或删除或原始 SQL 操作,该方法将导致问题,因为这些不会调用saveanddelete方法。但是,如果您需要使用这些功能,您可以使用混合方法——在执行一次性事务时使用saveand选项,并通过聚合定期触发完全重新计算以修复错误或在执行操作后立即delete知道会搞砸平衡。

于 2012-08-14T17:32:15.710 回答