2011-09-29 57 views
2

我有一對夫婦行內的管理表單顯示M2M領域,像這樣:Django管理員後保存方法 - 怎麼辦?

class ArticleAdmin(admin.ModelAdmin): 
    form = ArticleCustomAdminForm 
    inlines = (SpecificGemInline, SuiteInline,) 

基類看起來就像這樣:

​​

型號有一個特殊的領域article_code那應該彙總來自兩個內聯表示的m2m字段的一些數據,所以我寫了一個函數create_code(instance),它通過直接訪問模型實例字段來實現,如下所示:

def create_code(instance): 
    article_code_part1 = SpecificGem.objects.filter(article=instance) 
    article_code_part2 = instance.suite_set.all() 
    instance.article_code = #do something with both parts 

問題是,當我通過重寫ModelAdmin的save_model()或模型的save()函數調用此函數時,以下實例m2m字段會生成過期結果。甚至低於智障例如不會幫助:

class ArticleAdmin(admin.ModelAdmin): 
    #... 
    def save_model(self, request, obj, form, change): 
     obj.save() 
     create_code(obj) 
     obj.save() 

當我進入InlineFormset的clean()方法,我可以訪問它的形式數據,以便我能想出article_code的一部分,即使沒有實際節電...但我有兩個內聯。

那麼如何找到最頂端的保存方法,所以我可以在所有模型被驗證並保存到數據庫後調用我的聚合函數?

回答