在django中以级联方式检索要删除的对象

时间:2016-06-15 07:48:28

标签: python django

考虑这些课程:

class Foo(models.Model):
    pass

class Bar(models.Model):
    foo = models.ForeignKey(Foo)

class Baz(models.Model):
    bar = models.ForeignKey(Bar)

class XXX(models.Model):
    field = models.ForeignKey(field_related_to_FOO_somehow)
...

鉴于用户想要删除的实例foo=Foo.objects.get(...),我想向他提供他要删除的所有对象的视图。因此,如果用户确认,如何检索将以级联方式删除的BarBaz和所有其他相关对象XXX的所有实例?

2 个答案:

答案 0 :(得分:0)

foo = Foo.objects.get(id=foo_id)

bar = Bar.objects.filter(foo=foo)

baz = Baz.objects.filter(bar=bar)

baz.delete()
bar.delete()

或只是

foo.delete()

答案 1 :(得分:0)

您可以使用on_delete=models.SET_NULL 删除相关对象时,这将设置为无。

docs.djangoproject.com/en/1.9/ref/models/fields/#foreignkey