This commit is contained in:
behruz-dev
2025-08-19 13:47:28 +05:00
parent d6d8b9c4e7
commit 440acb8c6e

View File

@@ -1,6 +1,3 @@
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.shortcuts import get_object_or_404
from django.db.models import Prefetch from django.db.models import Prefetch
@@ -164,28 +161,14 @@ class ProjectAndFolderApiView(views.APIView):
required_permissions = ['project', 'project_folder'] required_permissions = ['project', 'project_folder']
def get(self, request): def get(self, request):
# Folderlarni projectlari bilan olish (bitta SQL query) folders = ProjectFolder.objects.prefetch_related('projects')
folders = ( projects = Project.objects.exclude(folder__isnull=False)
ProjectFolder.objects projects_serializer = serializers.ProjectsSerializer(projects, many=True)
.annotate( folders_serializer = serializers.ProjectFoldersSerializer(folders, many=True)
projects=Coalesce(
ArrayAgg('projects__name', distinct=True), # project nomlari list korinishida
Value([])
)
)
.values('id', 'title', 'projects')
)
# Folderga ulanmagan projectlar (folder__isnull=True)
projects_without_folder = (
Project.objects.filter(folder__isnull=True)
.values('id', 'name')
)
return Response( return Response(
{ {
"project_folders": list(folders), 'project_folders': folders_serializer.data,
"projects": list(projects_without_folder), 'projects': projects_serializer.data,
}, },
status=200 status=200
) )