在django中检索要在级联中删除的对象[重复]
Posted
技术标签:
【中文标题】在django中检索要在级联中删除的对象[重复]【英文标题】:Retrieve objects about to be deleted in cascade in django [duplicate] 【发布时间】:2016-06-15 07:48:28 【问题描述】:考虑这些类:
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(...)
,我想向他提供他将要删除的所有对象的视图。因此,如果用户确认,我如何检索Bar
、Baz
和所有其他相关对象XXX
的所有实例将被级联删除?
【问题讨论】:
你能使用和 django admin 一样的功能吗? github.com/django/django/blob/1.9.7/django/contrib/admin/… 这里有一个类似的问题:***.com/questions/12158714/… 【参考方案1】: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()
【讨论】:
我不想删除东西,但知道要删除什么。我不想明确声明相关对象,但想要通用并递归检索所有相关对象 你只是删除 foo - 在你运行 foo.delete() 的那一刻,所有的孩子都会消失 这仍然行不通,因为我正在考虑删除前的那一刻。【参考方案2】:您可以使用on_delete=models.SET_NULL
这将在删除相关对象时设置为 None。
docs.djangoproject.com/en/1.9/ref/models/fields/#foreignkey
【讨论】:
以上是关于在django中检索要在级联中删除的对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?
在Django .delete()中,是否可以检索被删除对象的'id'字段?