2012-02-06 85 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以处理您的逻辑;这是非常棘手的。

但是,我很惊讶你的行为遇到,从源头检查,对象应该保存无论如何,编辑与否。