Vai*_*hah 5 python django web django-rest-framework
假设我在默认数据库中有django模型,如A - > B - > C - > D.
C是D中的外键,类似B中的C和C中的A.
在删除对象A时,Django的默认行为是直接或间接地与A相关的所有对象将被自动删除(在删除级联上).因此,B,C,D将被自动删除.
我希望以这样的方式实现删除:在删除A的对象时,它将被移动到另一个名为'del'的数据库.同时,B,C,D的所有其他相关对象也将被移动.
是否有一种简单的方法可以一次性实现这一目标?
我已经在我的数据库的每个模型上使用删除标志实现了这个东西,而不是将内容移动到单独的数据库,如下所示:
deleted = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)
并为每个模型定义了soft_del函数,如下所示:
def soft_del(self):
self.deleted = True
self.save()
Run Code Online (Sandbox Code Playgroud)
因此,删除的模型将存在于同一数据库中,并将deleted标志设置为True.
为了产生ON DELETE CASCADE效果,我已经为每个模型添加了这样的soft_del函数,并为模型中的每个外键提供了一个related_name,如下所示:
class B(models.Model)
a = models.ForeignKey(A,related_name='related_Bs'))
Run Code Online (Sandbox Code Playgroud)
然后在parent的soft_del内调用child的soft_del,如下所示:
def soft_del_A(self):
self.deleted = True
for b in A.related_Bs.all():
b.soft_del_B()
self.save()
Run Code Online (Sandbox Code Playgroud)