Django删除对象时不影响ManyToMany关系
这是一个情况:
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 的相关对象了。
不过这些都不适用于你的情况,因为你有一个多对多的字段。对于多对多关系来说,级联删除是没有意义的,因为没有一个对象会像外键那样紧密地与另一个对象关联。