在管理员中编辑内联时,Django触发父模型保存

时间:2012-02-06 12:41:16

标签: python django django-admin

我有一个模型(Parent),与另一个模型(Child)有一对多的关系。父模型的save方法被覆盖:

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显示多个子模型对象。如果编辑并保存了父项字段,则调用save方法。当只编辑子项的字段时,Django不会调用父项的save方法(正如预期的那样,因为没有任何更改)。

强制保存父级的最佳方法是什么,即使只编辑了子级(这样我的覆盖方法就可以了)?

1 个答案:

答案 0 :(得分:2)

你有几个解决方案。从简单到复杂:

您可以为调用save的{​​{1}}实施自定义ChildModel方法 您还可以连接到ParentModel.save的{​​{1}}或ChildModel信号。

现在,如果您要同时更新大量post_save个实例,这两个解决方案将会很烦人,因为您将多次调用pre_save,可能没有目的。
您可能希望使用以下内容:
覆盖您的ChildModel ParentModel.save来处理您的逻辑;然而,这非常棘手。

然而,我对你遇到的行为感到非常惊讶,从检查来源,无论如何都要保存对象;编辑与否。

相关问题