首页 > 解决方案 > 带有相关实例更新的 Django 模型 Save() 方法

问题描述

我可能是一个中型 Django 用户,拥有很多 RTFM。

我有一个大致是这样的工作流程:

  1. 检索帐户(模型)对象。
  2. 帐户对象执​​行操作(更新字段等)
  3. 使用帐户作为外键创建相关使用(模型)对象。
  4. 将帐户对象更新为使用对象上的自定义 save() 的一部分。
  5. (保存在步骤 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 中找到它,并且我的谷歌搜索不起作用,因为我不确定我在寻找什么。

标签: pythondjangodjango-models

解决方案


推荐阅读