2010-01-29 66 views
3

所以我有兩個與ForeignKey相關的模型(表)。在管理員中,編輯頁面顯示第一個模型(假設ModelOne)以及第二個模型ModelTwo(TabularInline)的相關實例。內聯模型形式發送post_save信號嗎? (django)

我想要的是當第二個模型被改變時執行一些額外的操作。我可以在ModelTwo上使用post_save信號做到這一點。然而,post_save信號僅在我從其自己的編輯頁面內保存模型(即不在ModelOne的內聯中)時調用。

有沒有辦法在ModelTwo的內聯表單上附加post_save信號?

...作爲一種解決方法,我向ModelTwo添加了一些自定義驗證,無論它是否內聯,都會調用它),以調用我想要的方法。但是,由此設置引起的問題是,如果我正在創建ModelOne的新實例並同時創建ModelTwo的實例,則無法訪問與此兩個表相關的新實例的主鍵(外鍵)它還沒有保存)。主鍵是我需要的東西。

我也嘗試添加一個post_save信號ModelOne直接(這樣我就可以得到新的實例的PK),但它似乎post_save信號不經過ModelTwo的數據(何必呢,反正?)

那麼對此有什麼解決方案?內聯模型發出信號嗎?有沒有辦法在保存之前訪問新實例的PK?

回答

4

模型是模型。在管理界面中使用模型作爲內聯的事實不會以任何方式消除它。除非您覆蓋其功能,否則所有型號都會發出後期保存信號。

Here is what happens when you save any model.

+1

是的,似乎後保存信號只發送時,實際保存的形式,即有新的數據進來或現有的數據已經改變。 – 2010-02-02 13:40:23

4

很多時候解決出現的時間與信號來解決,它最終被解決通過重寫的各種保存方法之一更好。我已經通過重寫兩種方法之一有很多成功的在保存時注入額外的代碼:

  1. Admin Object's save_model method
  2. Model's save method.

信號仍然是得心應手,但我只是在這兩個地方有更好的運氣。

+0

我的第一個鏈接 – Charlesliam 2014-01-24 01:13:42

+0

目前在[管理對象的save_model方法1.6](https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#django.contrib .admin.ModelAdmin.save_model)和[模型的保存方法1.6](https://docs.djangoproject.com/en/1.6/topics/db/models/#overriding-predefined-model-methods)。 – Charlesliam 2014-01-24 01:20:30

1

以上所有內容都是正確的,只需添加更多內容: 當您在admin(包含內聯)保存對象時,內聯的'保存後'信號(當然還有內聯的保存方法對象)僅在您對內聯對象進行了一些更改時觸發。