From d6d8b9c4e70a9355b7b2fa2759b457299aacd054 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Tue, 19 Aug 2025 13:46:10 +0500 Subject: [PATCH] fix --- core/apps/projects/views/project.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/core/apps/projects/views/project.py b/core/apps/projects/views/project.py index 4db05d3..181a468 100644 --- a/core/apps/projects/views/project.py +++ b/core/apps/projects/views/project.py @@ -1,3 +1,6 @@ +from django.db.models import Value +from django.db.models.functions import Coalesce +from django.contrib.postgres.aggregates import ArrayAgg from django.shortcuts import get_object_or_404 from django.db.models import Prefetch @@ -161,16 +164,28 @@ class ProjectAndFolderApiView(views.APIView): required_permissions = ['project', 'project_folder'] def get(self, request): - folders = ProjectFolder.objects.prefetch_related('projects').values( - 'id', 'name', 'projects__id', 'projects__name' + # Folderlarni projectlari bilan olish (bitta SQL query) + folders = ( + ProjectFolder.objects + .annotate( + projects=Coalesce( + ArrayAgg('projects__name', distinct=True), # project nomlari list ko‘rinishida + Value([]) + ) + ) + .values('id', 'title', 'projects') ) - projects = Project.objects.exclude(folder__isnull=False).values('id', 'name') - projects_serializer = serializers.ProjectsSerializer(projects, many=True) - folders_serializer = serializers.ProjectFoldersSerializer(folders, many=True) + + # Folderga ulanmagan projectlar (folder__isnull=True) + projects_without_folder = ( + Project.objects.filter(folder__isnull=True) + .values('id', 'name') + ) + return Response( { - 'project_folders': folders_serializer.data, - 'projects': projects_serializer.data, + "project_folders": list(folders), + "projects": list(projects_without_folder), }, status=200 )