我有一个模型(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方法(正如预期的那样,因为没有任何更改)。
强制保存父级的最佳方法是什么,即使只编辑了子级(这样我的覆盖方法就可以了)?
答案 0 :(得分:2)
你有几个解决方案。从简单到复杂:
您可以为调用save
的{{1}}实施自定义ChildModel
方法
您还可以连接到ParentModel.save
的{{1}}或ChildModel
信号。
现在,如果您要同时更新大量post_save
个实例,这两个解决方案将会很烦人,因为您将多次调用pre_save
,可能没有目的。
您可能希望使用以下内容:
覆盖您的ChildModel
ParentModel.save
来处理您的逻辑;然而,这非常棘手。
然而,我对你遇到的行为感到非常惊讶,从检查来源,无论如何都要保存对象;编辑与否。