如何使用 django 更新会计应用程序中的余额?
Posted
技术标签:
【中文标题】如何使用 django 更新会计应用程序中的余额?【英文标题】:How to update balance in a accounting app with django ? 【发布时间】:2012-08-11 00:04:31 【问题描述】:我正在学习 Django,尝试做一个会计应用程序来跟踪我的开支等。
我使用两种模型创建了数据库,一种用于帐户,一种用于操作。 但我不知道如何在每次操作中保持我的余额更新。
我在想也许每次我保存一个新操作时,我都会通过覆盖操作模型的保存方法来更新余额?但是在这种情况下,如果我犯了一个错误并且必须删除一个操作,那么我的余额将不会更新,对吧?
我想我也可以创建一个 BalanceHistory 模型,其中包含所有余额的历史记录,但在删除操作的情况下也会出现同样的问题..
我看到的最佳选择是每次我想显示它时动态更新我的余额,添加当时的所有操作..但我不知道我该怎么做..
因此,如果有人对此有所了解,那就太好了。 我知道这不是纯粹与 Django 相关的问题,但是当我正在使用 Django 时,如果我能找到使用 Django 功能的想法会更好!
提前感谢您的时间和帮助!
【问题讨论】:
给我们看一些代码,也许吧??以及你期望它做什么...... 【参考方案1】:您说得对,这很棘手 - 除了根据帐户的整个历史记录在每次读取时动态计算余额之外,没有其他方法可以保证准确的余额。
如果您选择采用这种方式,您可以使用 Django ORM 的 aggregation features 来计算操作的总和。例如,如果您的操作有一个名为 amount
的字段(表示该操作的余额变化的正数或负数),您可以像这样计算余额:
Operation.objects.filter(account=my_account).aggregate(balance=Sum('amount'))
如果您出于某种原因不想这样做,您还可以使用您所描述的自定义save
方法来保持运行平衡。您可以使用delete
method 和save
一样处理单个项目的删除。
但是,如果您曾经使用批量插入、更新或删除或原始 SQL 操作,该方法将导致问题,因为这些不会调用 save
和 delete
方法。但是,如果您需要使用这些功能,您也许可以使用混合方法——在进行一次性交易时使用save
和delete
选项,并通过定期聚合触发完全重新计算以修复错误或做完手术后马上就会搞砸平衡。
【讨论】:
感谢您的准确回答!我想我会使用聚合功能进行动态更新。看起来更灵活,更易于维护。以上是关于如何使用 django 更新会计应用程序中的余额?的主要内容,如果未能解决你的问题,请参考以下文章