Излучают ли встроенные модели модели сигналы post_save? (Джанго) - PullRequest
4 голосов
/ 29 января 2010

Итак, у меня есть две модели (таблицы), связанные 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 ]

4 голосов
/ 30 января 2010

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

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

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

4 голосов
/ 30 января 2010

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

Вот что происходит при сохранении любой модели.

2 голосов
/ 24 декабря 2014

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

...