多个相关模型的post_save信号

时间:2015-05-21 19:35:18

标签: django django-models django-signals

我需要触发某些模型的任何更改。我的模特是:品牌,产品,包装。 PackagefkProduct,而产品有fkBrand。因此,当更改或创建或删除这些模型的某些实例时,我需要发送信号。我可以用post_save信号实现吗?我想如果我为较低的模型post_save写下Package信号,那么将触发BrandProduct的任何更改。但它不是

1 个答案:

答案 0 :(得分:0)

为什么没有触发你的信号? Django的post_save在模型的save()方法(docs)结束时触发。当您更新Package时,Product仍然只包含Package模型的密钥。因此Product未调用save()

你能做什么:

  1. 创建多个post_save信号。
  2. 覆盖模型“save()方法。
  3. 要绑定多个post_save信号,您只需执行以下操作:

    post_save.connect(do_package_stuff, Package, weak=False, dispatch_uid='package_post_save')
    post_save.connect(do_product_stuff, Product, weak=False, dispatch_uid='product_post_save')
    post_save.connect(do_brand_stuff, Brand, weak=False, dispatch_uid='brand_post_save')
    

    Overriding save()更容易(我可以说更多的推荐)。如果您对更好的事情感兴趣,可以看this question