我正在学习 Django,尝试制作一个会计应用程序来跟踪我的开支等。
我使用两种模型创建数据库,一种用于帐户,一种用于操作。
但我不知道如何在每次操作时更新我的余额。
我在想,也许每次我保存一个新操作时,我都会通过覆盖操作模型的保存方法来更新余额?但在这种情况下,如果我犯了一个错误,必须删除一项操作,那么我的余额就不会更新,对吧?
我想我还可以创建一个 BalanceHistory 模型,其中包含所有余额的历史记录,但在删除操作时也会出现同样的问题。
我看到的最好的选择是每次我想显示它时动态更新我的余额,添加当时的所有操作..但我不知道如何做到这一点..
因此,如果有人对此有一些见解,那就太好了。
我知道这不是一个纯粹与 Django 相关的问题,但由于我正在使用 Django,如果我能找到使用 Django 功能的想法会更好!
预先感谢您的时间和帮助!
你说得对,这很棘手——除了根据帐户的整个历史记录在每次读取时动态计算余额之外,没有其他方法可以保证准确的余额。
如果您选择那样做,您可以使用 Django ORM聚合特征 https://docs.djangoproject.com/en/dev/topics/db/aggregation/#generating-aggregates-over-a-queryset计算操作的总和。例如,如果您的操作有一个名为amount
(表示该操作余额变化的正数或负数),您可以计算余额,如下所示:
Operation.objects.filter(account=my_account).aggregate(balance=Sum('amount'))
如果您出于某种原因不想这样做,您也可以使用自定义来保持运行平衡save
正如你所描述的方法。你可以使用delete method https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.delete like save
处理单个项目的删除。
但是,如果您曾经使用批量插入、更新或删除或原始 SQL 操作,该方法将导致问题,因为这些操作不会调用save
and delete
方法。但是,如果您需要使用这些功能,您也许可以使用混合方法 - 使用save
and delete
进行一次性交易时的选项,并定期触发聚合的完全重新计算以修复错误,或者在执行您知道会破坏余额的操作后立即触发。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)