Python Django在管理中编辑内联时触发父模型保存
我有一个与另一个模型(子模型)有一对多关系的模型(父模型)。父模型的保存方法被覆盖:Python Django在管理中编辑内联时触发父模型保存,python,django,django-admin,Python,Django,Django Admin,我有一个与另一个模型(子模型)有一对多关系的模型(父模型)。父模型的保存方法被覆盖: class ParentModel(models.Model) (...) def save(self, *args, **kwargs): (...) # Do sth with the model super(ParentModel, self).save(*args, **kwargs) class ChildModel(models.Model):
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)
在管理面板中,多个子模型对象使用StackedLine显示在父模型页面上。如果编辑并保存父字段,则调用save方法。当只编辑子字段时,Django不会调用父字段的save方法(正如预期的那样,因为没有更改)
强制保存父对象的最佳方法是什么,即使只编辑了子对象(这样我的覆盖方法就可以完成它的工作) 您有一些解决方案。从简单到复杂,情况如下: 您可以为
ChildModel
实现一个自定义save
方法,该方法调用ParentModel.save
您还可以连接到您的
ChildModel
的post\u save
或pre\u save
信号
现在,如果您要同时更新大量的ChildModel
实例,这两种解决方案会很烦人,因为您将多次调用ParentModel.save
,可能没有目的。然后,您可能需要使用以下命令:
覆盖您的
ParentModel
的ModelAdmin.change\u view
以处理您的逻辑;然而,这是相当棘手的
然而,我对您遇到的行为感到非常惊讶,通过检查源代码,无论如何都应该保存对象;编辑与否 您希望仅在从管理员编辑内联时调用方法,还是在保存您的子模型时调用方法?它仅在管理员中可编辑,因此以较简单的为准。