2011-09-29 54 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的一部分,即使没有实际节电...但我有两个内联。

那么如何找到最顶端的保存方法,所以我可以在所有模型被验证并保存到数据库后调用我的聚合函数?

回答