我应该使用什么信号来更改Django相关对象

我应该使用什么信号来更改Django相关对象,django,signals,models,database-relations,Django,Signals,Models,Database Relations,我得到了3个模型(简化): 每次保存取款时,我必须执行以下操作: client.PersonalAccount.balance = client.PersonalAccount.balance - withdrawal.amount client.PersonalAccount.save 我应该用什么信号来做预保存,后保存还是初始化的?我想使它易于调试。如果任何帐户操作失败,则不应保存取款。 我也完全不确定我的关系语法是否正确,因此,如果有人对此冷淡地澄清..从逻辑上讲,一旦取出,数量必须减少

我得到了3个模型(简化):

每次保存取款时,我必须执行以下操作:

client.PersonalAccount.balance = client.PersonalAccount.balance - withdrawal.amount
client.PersonalAccount.save
我应该用什么信号来做<代码>预保存,
后保存
还是
初始化
的?我想使它易于调试。如果任何帐户操作失败,则不应保存取款。
我也完全不确定我的关系语法是否正确,因此,如果有人对此冷淡地澄清..

从逻辑上讲,一旦取出,数量必须减少。因此,
post_save
信号听起来很合适。从技术上讲,您也可以在此处使用
pre_save
,而不会遇到任何问题

但是,由于这些是异步调用,您应该非常小心,因为它们的行为不正常。假设您每分钟执行50个请求(例如),您永远不知道哪个请求首先完成(django不保证处理请求的顺序)。在这里,您需要仔细管理异步调用

或者,您可以简单地重写
save()
model方法并执行所需的操作

def save(obj, *args, **kwargs):
    super(ModelClass, self).save(*args, **kwargs)
    # update your persoanl account
    obj.PersonalAccount.save()

这比异步调用要好

我目前使用的是draw.create(var1,var2…)方法这是一个好的实践吗?
def save(obj, *args, **kwargs):
    super(ModelClass, self).save(*args, **kwargs)
    # update your persoanl account
    obj.PersonalAccount.save()