2012-08-14 36 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