我有一个简单的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信号?
答案 0 :(得分:0)
从管理表单中排除fresh
字段。最简单的方法是设置editable=False
。然后使用您所描述的自定义save
或post_save
信号。
如果由于某些原因您希望在管理员中可以编辑fresh
,则会有更复杂的选项,但鉴于您的设置方式,这似乎不太可能。