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



我有 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_savepost_save还是init?我想让它易于调试。如果任何帐户操作失败,它不应该保存提款。我也完全不确定我的关系语法是否正确,所以如果有人对此进行冷淡澄清......

从逻辑上讲,一旦取出,数量必须减少。因此,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()

这比异步调用更好

相关内容

  • 没有找到相关文章

最新更新