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()
).因此,如果这是您需要依赖的行为,请务必慎重考虑删除对象的方式。
我有三个 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()
).因此,如果这是您需要依赖的行为,请务必慎重考虑删除对象的方式。