Django删除对象时不影响ManyToMany关系

0 投票
1 回答
1784 浏览
提问于 2025-04-18 04:19

这是一个情况:

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

假设我有一个派对 p。我想删除这个派对 p(也就是通过 p.delete())但不想删除所有的主持人。请问我该怎么做?如果我在主持人那边加上 on_delete 选项,django却不识别这个选项。

1 个回答

0

级联删除这个功能是针对外键关系的,因为持有外键的模型通常会有一些状态和行为依赖于这个关系。为了避免在这种情况下发生级联删除,比如说有一个对象 foo,你需要遍历所有与 foo 相关的对象,确保它们都拥有

null=True

对于 foo,你还需要为每一个相关对象设置

foo=None

然后你就可以调用

foo.delete()

这样就不会删除 foo 的相关对象了。

不过这些都不适用于你的情况,因为你有一个多对多的字段。对于多对多关系来说,级联删除是没有意义的,因为没有一个对象会像外键那样紧密地与另一个对象关联。

撰写回答