update backend/dvadmin/utils/models.py 处理级联删除

当模型中指定了`on_delete=models.CASCADE`实现级联软删除关联对象的逻辑。对于一对一、一对多和多对多关系的对象,都会进行软删除处理。

Signed-off-by: 老高 <794071084@qq.com>
This commit is contained in:
老高
2024-07-15 06:59:44 +00:00
committed by Gitee
parent c8e235bed6
commit 5fc1390598

View File

@@ -61,8 +61,24 @@ class SoftDeleteModel(models.Model):
""" """
重写删除方法,直接开启软删除 重写删除方法,直接开启软删除
""" """
if soft_delete:
self.is_deleted = True self.is_deleted = True
self.save(using=using) self.save(using=using)
# 级联软删除关联对象
for related_object in self._meta.related_objects:
related_model = getattr(self, related_object.get_accessor_name())
# 处理一对多和多对多的关联对象
if related_object.one_to_many or related_object.many_to_many:
related_objects = related_model.all()
elif related_object.one_to_one:
related_objects = [related_model]
else:
continue
for obj in related_objects:
obj.delete(soft_delete=True)
else:
super().delete(using=using, *args, **kwargs)
class CoreModel(models.Model): class CoreModel(models.Model):