如何使用 django 更新会计应用程序中的余额?

2024-05-11

我正在学习 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(使用前将#替换为@)

如何使用 django 更新会计应用程序中的余额? 的相关文章

随机推荐

  • 运行 Nestjs 应用程序时,Typeorm 迁移中“无法在模块外部使用 import 语句”

    我创建了 Nestjs 应用程序 在根应用程序文件夹中 我有这些子文件夹 dist 移民 src test 迁移文件夹包含 typeorm 迁移 当运行应用程序时npm 运行启动 dev我有这个错误 import MigrationInte
  • Django:从登录页面重定向登录用户

    我想设置我的网站 以便如果用户点击 login页面并且他们已经登录 它会将他们重定向到主页 如果他们没有登录 那么它将正常显示 既然登录代码内置于 Django 中 我该如何做到这一点 我假设您当前正在使用内置登录视图 r accounts
  • 在运行时更改 OwinContext dbContext

    我需要运行时更改dbContext for Request GetOwinContext 使用特定的connectionString但它不起作用 I ve a dbContex class接受默认值connectionString from
  • 在 Raspberry Pi 上 - 登录后自动启动终端?

    我现在正在做一个小项目 我希望 python 脚本在登录 GUI 后自动运行 我按照这里的步骤操作 https www raspberrypi org forums view https www raspberrypi org forums
  • 使用字符串数组填充 Spinner

    当谈到 Android 应用程序时 我属于新手联盟 我希望用数组或字符串填充 Spinner 它是一个转换器应用程序 下面是我的 XML 文件的摘录 我希望填充 Spinner
  • Java:使用PreparedStatement将多行插入MySQL

    我想使用 Java 一次将多行插入 MySQL 表中 行数是动态的 过去我在做 for String element array myStatement setString 1 element 0 myStatement setString
  • 手动屏幕跟踪在 Firebase (iOS) 中不起作用

    我正在尝试禁用 Firebase 中的手动屏幕跟踪 并将其替换为我自己的屏幕跟踪实现 通过自动屏幕跟踪 我发送到 firebase 的每个事件都有两个额外的参数 firebase screen class and firebase scre
  • AD、ADFS 与 LDAP:像我 5 岁一样解释一下

    我没有与 Microsoft 合作 但我很难从概念上理解 AD ADFS 和 LDAP 如何协同工作 假设我有一个需要身份提供者的应用程序 AD 和 LDAP 如何发挥作用 我的谷歌搜索还没有为我提供这些概念的清晰总结 但如果有存在的资源
  • R:计算自上次出现某个值以来的累积总和和计数

    给定简化数据 set seed 13 user id rep 1 2 each 10 order id sample 1 20 replace FALSE cost round runif 20 1 5 75 1 category samp
  • chrome扩展需要从服务器端离线访问

    我正在构建一个 chrome 扩展 我用了chrome identity getAuthToken获取access token 这为我提供了客户端 浏览器 的access token 现在我想将此 access token 传递到我的服务器
  • Microsoft.Practices.EnterpriseLibrary.Data.DLL 但未在用户代码中处理

    搜索google并使用Enterprise Library data access来连接数据库 仅使用安装的数据访问包https www nuget org packages EnterpriseLibrary Data https www
  • 使用 Gradle 运行单元测试时,最大堆大小在哪里设置?

    我有一个失败的 OOM 单元测试 并想知道为什么我需要手动允许更大的maxHeapSize像这样 test maxHeapSize 4G 我认为最大堆没有上限 并且在 gradle api 源中找不到任何东西来证明我错了 但是 运行 gra
  • Gradle 自动增量和重命名 APK I/O 错误

    我正在尝试在 Android Studio 中自动递增内部版本号 关注了这个link http andreborud com android studio automatic incremental gradle versioning 而且
  • 在android中播放下载的Gif图像

    我正在从服务器下载我的应用程序中的 GIF 图像 然后用以下命令显示它ImageView但它不是动画的 有没有其他方法可以播放下载的动画GIF 图像 提前致谢 我使用下面的自定义视图而不是图像视图 public class SampleVi
  • SQL分组和总结

    我的表如下所示 income date productid invoiceid customerid 300 2015 01 01 A 1234551 1 300 2016 01 02 A 1234552 1 300 2016 01 03
  • 构建涉及 cmake 的项目,如何使其了解库

    当我尝试在 64 位 linux debian 机器上使用 cmake 和 gcc 构建此项目时 我从链接器中收到错误 Linking C executable cpsadamsx home dala lib64 libSimTKcommo
  • blueimp jQuery 文件上传,无需 ajax

    我真的很喜欢选择文件并进行预览以及取消或删除选项的客户端处理 但是我想用表单上传页面 并且不需要使用ajax 我一直在摆弄所有选项 但无论如何我都找不到用同步选择的文件发布到表单的方法 是否可以让 data files 与表单一起发布 您可
  • Python获取网站的所有内容到html文件

    请有人帮忙 我想将所有内容从 url 转移到 html 文件 有人可以帮助我吗 我也必须使用用户代理 欢迎来到SO 当您提出问题时 您需要提交您尝试过的代码 您可以在这里学习如何正确提问 https stackoverflow com he
  • HttpUtility.ParseQueryString 不解码特殊字符

    Uri uri new Uri redirectionUrl NameValueCollection col HttpUtility ParseQueryString uri Query uri Query已经被解码 那么我有什么办法可以阻
  • 如何使用 django 更新会计应用程序中的余额?

    我正在学习 Django 尝试制作一个会计应用程序来跟踪我的开支等 我使用两种模型创建数据库 一种用于帐户 一种用于操作 但我不知道如何在每次操作时更新我的 余额 我在想 也许每次我保存一个新操作时 我都会通过覆盖操作模型的保存方法来更新余