Django删除一个对象而没有级联到ManyToMany关系

时间:2014-04-26 05:53:00

标签: python sql database django

情况如下:

class Party(models.Model):
    hosts = ManyToManyField("User")

现在让我们说我有一个聚会p。我想删除p(即通过p.delete())而不删除其所有主机。我该怎么做呢?如果我将选项on_delete添加到主机,则django无法识别它。

1 个答案:

答案 0 :(得分:0)

级联删除功能适用于ForeignKey关系,因为保存ForeignKey的模型可能具有依赖于关系的状态和行为。为了避免在那种情况下级联删除,对于某些对象foo,你必须迭代所有foo的相关对象,确保它们都具有

null=True

对于foo,那么你必须设置

foo=None

对于每个这样的相关对象,然后你可以调用

foo.delete()

没有foo的相关对象被删除。

但是这一切都不适用于你的情况,因为你有一个ManyToMany字段。级联删除对于多对多关系没有意义,因为没有一个对象紧密耦合到另一个对象,就像ForeignKey一样。