Излучают ли встроенные модели модели сигналы post_save? (Джанго)

Итак, у меня есть две модели (таблицы), связанные ForeignKey. В админке на странице редактирования отображается первая модель (скажем, ModelOne) вместе со связанными экземплярами второй модели, ModelTwo (TabularInline).

То, что я хочу, это выполнить некоторые дополнительные действия при изменении второй модели. Я могу сделать это с помощью сигнала post_save на ModelTwo. Однако сигнал post_save вызывается только тогда, когда я сохраняю модель из ее собственной страницы редактирования (т. Е. Не из внутренних строк ModelOne).

Есть ли способ прикрепить сигнал post_save к встроенной форме ModelTwo?

... В качестве обходного пути я добавил некоторую пользовательскую проверку для ModelTwo, которая вызывается независимо от того, встроена она или нет), чтобы вызвать нужный метод. Однако проблема, возникающая из-за этого параметра, заключается в том, что если я одновременно создаю новый экземпляр ModelOne и одновременно создаю экземпляры ModelTwo, я не могу получить доступ к первичному ключу (внешнему ключу) нового экземпляра, который связывает две таблицы (поскольку он еще не был сохранен). И первичный ключ это то, что мне нужно.

Я также попытался добавить сигнал post_save непосредственно в ModelOne (чтобы я мог получить PK нового экземпляра), но кажется, что сигнал post_save не передает данные ModelTwo (и зачем это вообще нужно?)

Так в чем же решение? Встроенные модели излучают сигналы? Есть ли способ получить доступ к PK нового экземпляра перед его сохранением?

3 ответа

Решение

Модели являются моделями. Тот факт, что Модель используется в интерфейсе администратора как встроенный, никоим образом не отнимает ее. Все модели излучают сигнал пост-сохранения, если вы не отменяете его функциональность.

Вот что происходит, когда вы сохраняете любую модель.

Все вышеперечисленное является правильным, просто добавив еще кое-что: когда вы сохраняете объект в админке (который содержит inline), сигнал "post-save" встроенного объекта (и, конечно, метод save встроенного объекта) срабатывают только если вы внесли некоторые изменения во встроенный объект.

Большую часть времени, когда казалось, что решение решается с помощью сигнала, оно решается лучше, переопределяя один из различных методов сохранения. У меня был большой успех при добавлении дополнительного кода во время экономии путем переопределения одного из двух методов:

  1. Метод save_model объекта Admin
  2. Метод сохранения модели.

Сигналы все еще удобны, но мне просто повезло в этих двух местах.

Другие вопросы по тегам