python - 带有相关实例更新的 Django 模型 Save() 方法
问题描述
我可能是一个中型 Django 用户,拥有很多 RTFM。
我有一个大致是这样的工作流程:
- 检索帐户(模型)对象。
- 对帐户对象执行操作(更新字段等)
- 使用帐户作为外键创建相关使用(模型)对象。
- 将帐户对象更新为使用对象上的自定义 save() 的一部分。
- (保存在步骤 2 中对帐户所做的任何更改)。
型号:
class Account(models.Model):
...
credit_balance = models.IntegerField(...)
...
class Usage(models.Model):
...
account = models.ForeignKey(Account, ...)
credit_balance = models.IntegerField(...)
...
def save( self, *args, **kwargs ):
"""Custom usage save to update account stats."""
if self.account:
self.account.credit_balance = self.credit_balance
self.account.save()
各种功能/方法中的代码:
account = Account.objects.get(pk=pk)
[do something to account]
usage = Usage.objects.create(account = account,
tariff_short_name = account.tariff.short_name,
**customer_data['usage'])
我真正努力解决的是如果我需要做:
account.save()
在这一点上,有什么影响?
当我在使用对象自定义保存方法中保存相关帐户对象时,似乎保存了我对帐户所做的更改(例如在步骤 2 中) 。
为什么?使用对象如何“知道”实例化帐户对象的当前状态是什么?
我期望随后必须保存帐户对象,可能使用 save(update_fields=[]) 来防止将使用对象更新覆盖到帐户模型。
抱歉,这太深奥了——我只是不明白 Django 在这里的行为。我似乎可以在 tfm 中找到它,并且我的谷歌搜索不起作用,因为我不确定我在寻找什么。
解决方案
推荐阅读
- reactjs - FullCalendar v5:渲染弹出窗口以删除事件
- react-native - 在 react-native 中安装 AsyncStorage 时出错
- html - 如何使垂直导航栏占据页面高度的 100%?
- scala - Akka HTTP 客户端服务器空闲超时不起作用
- angular - shadow dom 中未显示 swiper 分页子弹
- node.js - 猫鼬代码在哪里执行?
- powershell - Powershell导入csv,其中列数据与txt文件中的数据匹配
- flutter - 在颤振应用程序中将2个RadialGradient组合在一起
- javascript - 检索数组中某个字符之前的所有值
- input - 具有许多特征和不同序列长度的 LSTM 的输入形状