Skip to main content
 首页 » 编程设计

python之如何删除 django 关系中的对象(同时保留所有相关对象)

2024年09月03日3498°冷暖

我有以下模型:

One 
   name (Char) 
 
Many 
    one (ForeignKey,blank=True,null=True) 
    title (Char) 

我想删除一个 One 实例,所有相关对象都应该失去与 One 实例的关系。目前我的代码如下所示:

one=One.objects.get(<some criterion>) 
 
more=Many.objects.filter(one=one) 
for m in more 
    m.one=None 
    m.save() 
#and finally: 
one.delete() 

代码有什么作用? 它找到应该删除的对象,然后搜索相关对象,将它们的 ForeignKey 设置为 None,最后删除 One 实例。但在该进程的某处,它还设法杀死进程中的所有相关对象(许多 实例)。 我的问题是:为什么这些相关对象会被删除,我该如何防止这种情况发生?

请您参考如下方法:

给出的代码是正确的。我问这个问题时遇到的问题是我在实现过程中出现了错字。

让我感到羞耻

嗯……还有一点可以改进:

more=Many.objects.filter(one=one) 
for m in more 
    m.one=None 
    m.save() 
#and finally: 
one.delete() 

可以写成:

for m in one.many_set.all() 
    m.one=None 
    m.save() 
one.delete() 

相当于:

one.many_set.clear() 
one.delete()