update backend/dvadmin/utils/models.py 处理级联删除
当模型中指定了`on_delete=models.CASCADE`实现级联软删除关联对象的逻辑。对于一对一、一对多和多对多关系的对象,都会进行软删除处理。 Signed-off-by: 老高 <794071084@qq.com>
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user