diff --git a/backend/dvadmin/utils/models.py b/backend/dvadmin/utils/models.py index 09d13f1a1943194620346921905bf5b7dac8e6dd..b387ea4b21c5d68e2541359f83435d0a41a74dab 100644 --- a/backend/dvadmin/utils/models.py +++ b/backend/dvadmin/utils/models.py @@ -61,8 +61,24 @@ class SoftDeleteModel(models.Model): """ 重写删除方法,直接开启软删除 """ - self.is_deleted = True - self.save(using=using) + if soft_delete: + self.is_deleted = True + 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):