5

所以我有两个由 ForeignKey 相关的模型(表)。在管理中,编辑页面显示第一个模型(假设是 ModelOne)以及第二个模型的相关实例 ModelTwo (TabularInline)。

我想要的是在更改第二个模型时执行一些额外的操作。我可以通过 ModelTwo 上的 post_save 信号来做到这一点。但是,只有当我从它自己的编辑页面(即不在 ModelOne 的内联中)保存模型时,才会调用 post_save 信号。

有没有办法在 ModelTwo 的内联表单上附加一个 post_save 信号?

...作为一种解决方法,我向 ModelTwo 添加了一些自定义验证,无论它是否内联都会被调用),以调用我想要的方法。但是,此设置产生的问题是,如果我创建 ModelOne 的新实例并同时创建 ModelTwo 的实例,我无法访问关联两个表的新实例的主键(外键)(因为它尚未保存)。主键是我需要的。

我还尝试直接向 ModelOne 添加一个 post_save 信号(这样我就可以获得新实例的 PK),但似乎 post_save 信号没有传递 ModelTwo 的数据(为什么要传递呢?)

那么解决这个问题的方法是什么?内联模型会发出信号吗?有没有办法在保存之前访问新实例的PK?

4

3 回答 3

5

模型就是模型。模型在管理界面中作为内联使用这一事实并没有以任何方式消除它。除非您覆盖其功能,否则所有模型都会发出保存后信号。

这是保存任何模型时会发生的情况。

于 2010-01-30T15:27:51.797 回答
4

大多数情况下,当一个解决方案似乎用信号解决时,它最终通过覆盖各种保存方法之一得到了更好的解决。通过覆盖以下两种方法之一,我在节省时间注入额外代码方面取得了很大成功:

  1. 管理对象的save_model 方法
  2. 模型的保存方法。

信号仍然很方便,但我在这两个地方运气更好。

于 2010-01-30T15:31:30.947 回答
3

以上所有内容都是正确的,只是添加更多内容:当您在管理员中保存对象(包含内联)时,内联的“保存后”信号(当然还有内联对象的保存方法)仅被触发如果您对内联对象进行了一些更改。

于 2014-12-24T08:13:32.590 回答