gpt4 book ai didi

python - 软删除 Django 数据库对象

转载 作者:太空狗 更新时间:2023-10-30 00:54:25 26 4
gpt4 key购买 nike

假设我在默认数据库中有 Django 模型,例如 A ->B ->C ->D。

C是D中的外键,类似B在C中,C在A中。

在删除对象A时,Django的默认行为是所有与A直接或间接相关的对象都会被自动删除(On delete cascade)。因此,B,C,D也会被自动删除。

我想以一种方式实现删除,这样在删除 A 的一个对象时,它会被移动到另一个名为“del”的数据库。此外,B、C、D 的所有其他相关对象也将被移动.

是否有一种简单的方法可以一次性实现?

最佳答案

我已经在我的数据库的每个模型上使用 deleted 标志实现了这个东西,而不是将东西移动到单独的数据库,如下所示:

deleted = models.BooleanField(default=False)

并为每个模型定义了一个soft_del函数如下:

def soft_del(self):
self.deleted = True
self.save()

因此删除的模型将存在于同一个数据库中,删除标志设置为 True。

同时为了产生 ON DELETE CASCADE 效果,我向每个模型添加了这样的 soft_del 函数,并为模型中的每个外键指定了一个 related_name,如下所示:

class B(models.Model)
a = models.ForeignKey(A,related_name='related_Bs'))

然后在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()

关于python - 软删除 Django 数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com