From 16ead75d3b51ea94ec293cc4c53b54e0ba459efa Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 5 Jun 2024 14:07:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=8E=B7=E5=8F=96=E5=AD=90=E9=9B=86?= =?UTF-8?q?=E7=9A=84=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/queryset.py | 7 +++++++ apps/utils/viewsets.py | 9 --------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/utils/queryset.py b/apps/utils/queryset.py index ceb2eb89..f554c792 100755 --- a/apps/utils/queryset.py +++ b/apps/utils/queryset.py @@ -8,10 +8,17 @@ def get_child_queryset_u(checkQueryset, hasParent=True): 查的范围checkQueryset 父obj 是否包含父默认True + 若有parent_link字段则进行性能优化 ''' cls = type(checkQueryset.model) if hasattr(cls, 'parent'): queryset = cls.objects.none() + if hasattr(cls, 'parent_link'): + for item in checkQueryset: + queryset = queryset | cls.objects.filter(parent_link__contains=item.id) + if hasParent: + queryset = queryset | cls.objects.filter(pk=item.id) + return queryset if hasParent: queryset = checkQueryset child_queryset = checkQueryset.filter(parent__in=queryset) diff --git a/apps/utils/viewsets.py b/apps/utils/viewsets.py index 5b03a80c..db865a2c 100755 --- a/apps/utils/viewsets.py +++ b/apps/utils/viewsets.py @@ -113,15 +113,6 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): queryset = queryset.select_related(*self.select_related_fields) if self.prefetch_related_fields: queryset = queryset.prefetch_related(*self.prefetch_related_fields) - - # 查询出子集数据,请谨慎使用 - has_children = self.request.query_params.get('has_children', 'no') - if has_children == 'hasparent': - queryset = get_child_queryset_u(queryset, True) - elif has_children == 'noparent': - queryset = get_child_queryset_u(queryset, False) - else: - pass return queryset def get_queryset(self):