2015-05-21 3 views
1

Мне нужно вызвать любые изменения некоторых моделей. Мои модели: Brand, Product, Package. Package имеет fk до Product и Продукт имеет fk до Brand. Поэтому, когда некоторые экземпляры этих моделей меняются или создаются или удаляются, мне нужно отправить сигнал. Могу ли я реализовать его с сигналом post_save? Я думал, что если я напишу post_save сигнал для более низкой модели: Package, то любые изменения с Brand или Product будут сработаны. Но это неpost_save сигнал для нескольких связанных моделей

+0

'post_save' связан с методом' save' 'Model'. Таким образом, он будет выполнен только тогда, когда запускается этот специальный метод 'save'. – Gocht

+0

вы должны написать post_save сигнал для каждой вашей модели –

ответ

0

Почему ваши сигналы не срабатывают? Django's post_save запускается в конце метода модели save() (docs). Когда вы обновляете Package, Product по-прежнему содержит только ключ к модели Package. Таким образом, Product не звонит save().

Что вы можете сделать:

  1. Создайте несколько post_save сигналов.
  2. Переопределить модели save() метод.

Чтобы связать несколько 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') 

Overridingsave() легче (и я могу сказать больше recommeneded). Вы можете увидеть this question, если вы заинтересованы в том, что лучше.

Смежные вопросы