Django 模型中的复杂级联

Complex Cascading in Django Models

我有三个 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)

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

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

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

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