所以我有两个与ForeignKey相关的模型(表)。在管理员中,编辑页面显示第一个模型(比如说ModelOne)以及第二个模型的相关实例,ModelTwo(TabularInline)。
我想要的是在更改第二个模型时执行一些额外的操作。我可以在ModelTwo上使用post_save信号执行此操作。但是,仅当我从自己的编辑页面中保存模型时(即不在ModelOne的内联中),才会调用post_save信号。
有没有办法在ModelTwo的内联形式上附加post_save信号?
...作为一种解决方法,我向ModelTwo添加了一些自定义验证,无论它是否内联,都会被调用,以调用我想要的方法。但是,此设置产生的问题是,如果我正在创建ModelOne的新实例并同时创建ModelTwo实例,则无法访问与两个表相关的新实例的主键(外键)(从它尚未保存)。主键是我需要的东西。
我也尝试直接向ModelOne添加一个post_save信号(这样我就可以得到新实例的PK)但似乎post_save信号没有传递ModelTwo的数据(为什么它应该呢?)
那么解决方案是什么?内联模型会发出信号吗?有没有办法在保存之前访问新实例的PK?
答案 0 :(得分:4)
模型是模型。模型在管理界面中用作内联的事实不会以任何方式消除它。除非您覆盖其功能,否则所有型号都会发出保存后信号。
答案 1 :(得分:4)
大多数情况下,当解决方案似乎用信号解决时,它最终通过覆盖各种保存方法之一来解决更好。通过覆盖以下两种方法之一,我在节省时间注入额外代码方面取得了很大成功:
信号仍然很方便,但我在这两个地方的运气更好。
答案 2 :(得分:2)
以上所有内容都是正确的,只需添加更多内容: 当您在admin(包含内联)中保存对象时,只有在对内联对象进行了一些更改时才会触发内联的“保存后”信号(当然还有内联对象的保存方法)。