如何在修改子项时更新父Django模型

时间:2013-12-22 22:34:50

标签: python django django-admin

我有一个简单的Django模型,如:

class Parent(models.Model):

    fresh = models.BooleanField(default=True)

class Child(models.Model):

    parent = models.ForeignKey(Parent)

    <other fields>

我在管理员中设置了这些设置,以便子记录在父目录下显示为内联:

class ChildInline(admin.TabularInline):
    model = Child

class ParentAdmin(admin.ModelAdmin):
    inlines = [ChildInline]

如何对其进行配置,以便在用户创建,更新或删除子记录时,设置parent.fresh = False

我尝试简单地覆盖Child的save()方法,但这在admin中不起作用,因为它首先保存子节点,然后保存父记录,这会覆盖子节点对父节点所做的任何修改。

我也试过设置客户post_save信号,但效果是一样的。保存子项后执行的信号,但不保存父项之前执行的信号,因此更改仍会被覆盖。

还有其他方法吗?是否有一些post_admin_save信号?

1 个答案:

答案 0 :(得分:0)

从管理表单中排除fresh字段。最简单的方法是设置editable=False。然后使用您所描述的自定义savepost_save信号。

如果由于某些原因您希望在管理员中可以编辑fresh,则会有更复杂的选项,但鉴于您的设置方式,这似乎不太可能。