Django模型中的复杂级联

时间:2016-03-02 00:45:54

标签: python django django-models django-orm

我有三个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。蒂姆邀请鲍勃参加活动。所以我们有一个事件对象和一个邀请对象。鲍勃删除他的帐户。邀请被删除,但事件仍然没有被邀请者。我希望这能自动删除该事件。感谢文档中的任何帮助或指导!

1 个答案:

答案 0 :(得分:1)

您可以override模型上的delete方法 - 在这种情况下为Invitation - 来检查目标Event是否不再有任何相关的邀请,以及适当删除它(只需确保在那里的某处调用super,否则实际的删除不会发生。)

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

但是,重要的是要注意,只有在单个实例上直接调用delete()时才会调用它们,而不是在查询集上使用delete()时调用(例如{{1} }})。因此,如果这是您需要依赖的行为,那么非常慎重地考虑如何删除对象。