fix
This commit is contained in:
@@ -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.shortcuts import get_object_or_404
|
||||||
from django.db.models import Prefetch
|
from django.db.models import Prefetch
|
||||||
|
|
||||||
@@ -161,16 +164,28 @@ class ProjectAndFolderApiView(views.APIView):
|
|||||||
required_permissions = ['project', 'project_folder']
|
required_permissions = ['project', 'project_folder']
|
||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
folders = ProjectFolder.objects.prefetch_related('projects').values(
|
# Folderlarni projectlari bilan olish (bitta SQL query)
|
||||||
'id', 'name', 'projects__id', 'projects__name'
|
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)
|
# Folderga ulanmagan projectlar (folder__isnull=True)
|
||||||
folders_serializer = serializers.ProjectFoldersSerializer(folders, many=True)
|
projects_without_folder = (
|
||||||
|
Project.objects.filter(folder__isnull=True)
|
||||||
|
.values('id', 'name')
|
||||||
|
)
|
||||||
|
|
||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
'project_folders': folders_serializer.data,
|
"project_folders": list(folders),
|
||||||
'projects': projects_serializer.data,
|
"projects": list(projects_without_folder),
|
||||||
},
|
},
|
||||||
status=200
|
status=200
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user