【问题标题】:Complex Cascading in Django ModelsDjango 模型中的复杂级联
【发布时间】:2016-03-02 00:45:54
【问题描述】:

我有三个 Django 模型:

class Invitation(models.Model):
     user = models.ForeignKey(settings.AUTH_USER_MODEL)
     invited_by = models.ForeignKey("User")
     event = models.ForeignKey("Event", related_name="invitations")

class User(models.Model):
     name = models.CharField(_('full name'))

class Event(models.Model):
     title = models.CharField()
     invitees = models.ManyToManyField(settings.AUTH_USER_MODEL)
     owner = models.ForeignKey(settings.AUTH_USER_MODEL)

现在,如果受邀者为空,我想删除 Event 模型。所以我们有两个用户,Tim 和 Bob。蒂姆邀请鲍勃参加活动。所以我们有一个事件对象和一个邀请对象。 Bob 删除了他的帐户。邀请被删除,但活动仍然没有受邀者。我希望它自动删除事件。感谢文档中的任何帮助或指导!

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    您可以在模型上override delete 方法 - 在本例中为 Invitation - 检查目标 Event 是否不再有任何相关邀请,并适当删除它(只需确保在其中某处调用super,否则不会发生实际删除)。

    您可以使用post_delete signal 完成同样的事情。

    但是,重要的是要注意,只有在单个实例上直接调用 delete() 时才会调用这些,而不是在查询集上使用 delete() 时(例如 Invitation.objects.filter(...).delete())。因此,如果这是您需要依赖的行为,请务必慎重考虑如何删除对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-31
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      相关资源
      最近更新 更多