2012-02-06 88 views
0

我有一個模型(父)與另一個模型(兒童)的一對多關係。父模型的保存方法被覆蓋:Django觸發父模型保存在管理內嵌編輯

class ParentModel(models.Model) 
    (...) 

    def save(self, *args, **kwargs): 
     (...) # Do sth with the model 
     super(ParentModel, self).save(*args, **kwargs) 

class ChildModel(models.Model): 
    parent= models.ForeignKey(ParentModel) 

在管理面板多個子模型對象父模型的網頁上使用StackedInline顯示。如果父區域被編輯並保存,則調用保存方法。當只編輯子字段時,Django不會調用父類的保存方法(如預期的那樣,因爲沒有更改)。

什麼是強制保存父母的最好方法,即使只有孩子被編輯過(這樣我的被覆蓋的方法是它的東西)?

+0

您是否希望僅在從管理員編輯內聯時或者在保存ChildModel時才調用您的方法? – 2012-02-06 13:16:57

+0

只能在管理員中進行編輯,因此無論哪個更簡單。 – 2012-02-06 13:23:41

回答

2

您有幾個解決方案。從簡單到複雜:

您可以實現ChildModel的自定義save方法,該方法調用ParentModel.save
您也可以連接到您的ChildModelpost_savepre_save信號。

現在,如果您要一次更新很多ChildModel實例,那麼這兩個解決方案將很惱人,因爲您將多次撥打ParentModel.save,可能沒有目的。
然後您可能想要使用以下內容:
覆蓋您的ParentModelModelAdmin.change_view以處理您的邏輯;這是非常棘手的。

但是,我很驚訝你的行爲遇到,從源頭檢查,對象應該保存無論如何,編輯與否。