2013-12-22 34 views
0

我有一个简单的Django模型,如:如何更新父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

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

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

还有别的办法吗?是否有一些post_admin_save信号?

回答

0

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

如果由于某种原因,您希望fresh可以在管理员中进行编辑,则会出现更复杂的选项,但在您设置它的方式看起来不太可能。

相关问题