diff --git a/apps/utils/mixins.py b/apps/utils/mixins.py index 4ba3f8f7..501f3f26 100755 --- a/apps/utils/mixins.py +++ b/apps/utils/mixins.py @@ -171,6 +171,8 @@ class BulkDestroyModelMixin(DestroyModelMixin): raise ValidationError(**PKS_ERROR) else: instance = self.get_object() + if hasattr(instance, "parent") and instance.__class__.objects.filter(parent=instance).exists(): + raise ParseError('存在子级,无法删除') self.perform_destroy(instance) return Response(status=204) diff --git a/apps/utils/queryset.py b/apps/utils/queryset.py index e346091f..ceb2eb89 100755 --- a/apps/utils/queryset.py +++ b/apps/utils/queryset.py @@ -52,9 +52,15 @@ def get_child_queryset2(obj, hasParent=True): obj实例 数据表需包含parent字段 是否包含父默认True + 若有parent_link字段则进行性能优化 ''' cls = type(obj) queryset = cls.objects.none() + if hasattr(cls, 'parent_link'): + queryset = cls.objects.filter(parent_link__contains=obj.id) + if hasParent: + queryset = queryset | cls.objects.filter(pk=obj.id) + return queryset if hasParent: queryset = cls.objects.filter(pk=obj.id) child_queryset = cls.objects.filter(parent=obj)