我有3个模型(简化):
class User(models.Model):
...
class PersonalAccount(models.Model):
user = models.OneToOneField(user)
balance = MoneyField() (like float)
class Withdrawal(models.Model):
date = models.DateField()
amount = MoneyField()
client = ForeignKey(User)
account =ForeignKey(PersonalAccount)
每次我保存取款时,我都必须这样做:
client.PersonalAccount.balance = client.PersonalAccount.balance - withdrawal.amount
client.PersonalAccount.save
我应该用什么信号来做呢? pre_save
,post_save
或init
个?我想让调试变得容易。如果任何帐户操作失败,则不应保存提款。
我还完全不确定我的关系语法是否正确,所以如果有人冷清楚这一点......
答案 0 :(得分:0)
逻辑上,一旦取出,金额必须减少。因此,post_save
信号听起来合适。从技术上讲,你也可以毫不费力地使用pre_save
。
但是,由于这些是异步调用,因此他们应该非常小心,因为他们行为不端。假设您执行50个请求/分钟(示例),您永远不知道哪个请求首先完成(django不保证请求处理的顺序)。在这里,您需要仔细管理异步调用。
或者您可以简单地覆盖save()
模型方法并执行您想要的操作..
def save(obj, *args, **kwargs):
super(ModelClass, self).save(*args, **kwargs)
# update your persoanl account
obj.PersonalAccount.save()
这比异步调用
更好