feat: base 优化utils queryset查询

This commit is contained in:
caoqianming 2024-02-25 21:12:46 +08:00
parent f252f206ac
commit a1ef065e8c
1 changed files with 7 additions and 8 deletions

View File

@ -1,4 +1,5 @@
from django.apps import apps from django.apps import apps
from django.db.models import Q
def get_child_queryset_u(checkQueryset, obj, hasParent=True): def get_child_queryset_u(checkQueryset, obj, hasParent=True):
@ -10,11 +11,10 @@ def get_child_queryset_u(checkQueryset, obj, hasParent=True):
''' '''
cls = type(obj) cls = type(obj)
queryset = cls.objects.none() queryset = cls.objects.none()
fatherQueryset = cls.objects.filter(pk=obj.id)
if hasParent: if hasParent:
queryset = queryset | fatherQueryset queryset = cls.objects.filter(pk=obj.id)
child_queryset = checkQueryset.filter(parent=obj) child_queryset = checkQueryset.filter(parent=obj)
while child_queryset: while child_queryset.exists():
queryset = queryset | child_queryset queryset = queryset | child_queryset
child_queryset = checkQueryset.filter(parent__in=child_queryset) child_queryset = checkQueryset.filter(parent__in=child_queryset)
return queryset return queryset
@ -33,9 +33,9 @@ def get_child_queryset(name, pk, hasParent=True):
fatherQueryset = cls.objects.filter(pk=pk) fatherQueryset = cls.objects.filter(pk=pk)
if fatherQueryset.exists(): if fatherQueryset.exists():
if hasParent: if hasParent:
queryset = queryset | fatherQueryset queryset = fatherQueryset
child_queryset = cls.objects.filter(parent=fatherQueryset.first()) child_queryset = cls.objects.filter(parent=fatherQueryset.first())
while child_queryset: while child_queryset.exists():
queryset = queryset | child_queryset queryset = queryset | child_queryset
child_queryset = cls.objects.filter(parent__in=child_queryset) child_queryset = cls.objects.filter(parent__in=child_queryset)
return queryset return queryset
@ -50,11 +50,10 @@ def get_child_queryset2(obj, hasParent=True):
''' '''
cls = type(obj) cls = type(obj)
queryset = cls.objects.none() queryset = cls.objects.none()
fatherQueryset = cls.objects.filter(pk=obj.id)
if hasParent: if hasParent:
queryset = queryset | fatherQueryset queryset = cls.objects.filter(pk=obj.id)
child_queryset = cls.objects.filter(parent=obj) child_queryset = cls.objects.filter(parent=obj)
while child_queryset: while child_queryset.exists():
queryset = queryset | child_queryset queryset = queryset | child_queryset
child_queryset = cls.objects.filter(parent__in=child_queryset) child_queryset = cls.objects.filter(parent__in=child_queryset)
return queryset return queryset