From 5fc139059897f168477a5dc4586deb6013681bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E9=AB=98?= <794071084@qq.com> Date: Mon, 15 Jul 2024 06:59:44 +0000 Subject: [PATCH] =?UTF-8?q?update=20backend/dvadmin/utils/models.py=20?= =?UTF-8?q?=E5=A4=84=E7=90=86=E7=BA=A7=E8=81=94=E5=88=A0=E9=99=A4=20?= =?UTF-8?q?=E5=BD=93=E6=A8=A1=E5=9E=8B=E4=B8=AD=E6=8C=87=E5=AE=9A=E4=BA=86?= =?UTF-8?q?`on=5Fdelete=3Dmodels.CASCADE`=E5=AE=9E=E7=8E=B0=E7=BA=A7?= =?UTF-8?q?=E8=81=94=E8=BD=AF=E5=88=A0=E9=99=A4=E5=85=B3=E8=81=94=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E7=9A=84=E9=80=BB=E8=BE=91=E3=80=82=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E4=B8=80=E5=AF=B9=E4=B8=80=E3=80=81=E4=B8=80=E5=AF=B9=E5=A4=9A?= =?UTF-8?q?=E5=92=8C=E5=A4=9A=E5=AF=B9=E5=A4=9A=E5=85=B3=E7=B3=BB=E7=9A=84?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=EF=BC=8C=E9=83=BD=E4=BC=9A=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E8=BD=AF=E5=88=A0=E9=99=A4=E5=A4=84=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 老高 <794071084@qq.com> --- backend/dvadmin/utils/models.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/backend/dvadmin/utils/models.py b/backend/dvadmin/utils/models.py index 09d13f1a1..b387ea4b2 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): -- Gitee