【问题标题】:How to update parent Django model when child modified子修改时如何更新父Django模型
【发布时间】:2014-01-11 03:42:05
【问题描述】:

我有一个简单的 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 信号?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

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

    如果出于某种原因您希望 fresh 在管理员中可编辑,则有更复杂的选项,但考虑到您的设置方式,这似乎不太可能。

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 2019-04-15
      • 2011-09-09
      • 1970-01-01
      • 2017-06-06
      • 2014-02-01
      • 1970-01-01
      • 2020-12-04
      • 2021-10-02
      相关资源
      最近更新 更多