From 22b58736705184f17b99924fff385665458ed909 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 15 Oct 2025 14:27:47 +0500 Subject: [PATCH] fix --- core/apps/projects/serializers/project.py | 16 ++-------------- core/apps/projects/views/project.py | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/core/apps/projects/serializers/project.py b/core/apps/projects/serializers/project.py index 4486f5c..df9d843 100644 --- a/core/apps/projects/serializers/project.py +++ b/core/apps/projects/serializers/project.py @@ -294,20 +294,8 @@ class ProjectsSerializer(serializers.ModelSerializer): class ProjectFoldersSerializer(serializers.ModelSerializer): - projects = serializers.SerializerMethodField(method_name='get_projects') + projects = ProjectsSerializer(many=True, read_only=True) class Meta: model = ProjectFolder - fields = ['id', 'name', 'projects'] - - def get_projects(self, obj): - user = self.context.get('user') - is_mine = self.context.get('is_mine') - if is_mine and is_mine.lower() == 'true': - projects = obj.projects.filter( - Q(boss=user) | - Q(foreman=user) | - Q(other_members=user) - ).distinct() - return ProjectsSerializer(projects, many=True).data - return ProjectsSerializer(obj.projects, many=True).data \ No newline at end of file + fields = ['id', 'name', 'projects'] \ No newline at end of file diff --git a/core/apps/projects/views/project.py b/core/apps/projects/views/project.py index 5c81f49..ce71c6c 100644 --- a/core/apps/projects/views/project.py +++ b/core/apps/projects/views/project.py @@ -176,21 +176,30 @@ class ProjectAndFolderApiView(views.APIView): def get(self, request): mine = request.query_params.get('is_mine') wherehouse_ids = request.query_params.getlist('wherehouse') - folders = ProjectFolder.objects.prefetch_related('projects') + projects = Project.objects.exclude(folder__isnull=False) + folder_projects = Project.objects.all() + if mine and mine.lower() == 'true': - projects = projects.filter(Q(boss=request.user) | Q(foreman=request.user) | Q(other_members=request.user)).distinct() + user_filter = Q(boss=request.user) | Q(foreman=request.user) | Q(other_members=request.user) + projects = projects.filter(user_filter).distinct() + folder_projects = folder_projects.filter(user_filter).distinct() + if wherehouse_ids: projects = projects.filter(wherehouse__in=wherehouse_ids) - projects_serializer = serializers.ProjectsSerializer(projects, many=True) - folders_serializer = serializers.ProjectFoldersSerializer( - folders, many=True, - context={'user': request.user, 'is_mine': mine} + folder_projects = folder_projects.filter(wherehouse__in=wherehouse_ids) + + folders = ProjectFolder.objects.prefetch_related( + Prefetch('projects', queryset=folder_projects) ) + + projects_serializer = serializers.ProjectsSerializer(projects, many=True) + folders_serializer = serializers.ProjectFoldersSerializer(folders, many=True) + return Response( { 'project_folders': folders_serializer.data, 'projects': projects_serializer.data, }, status=200 - ) + ) \ No newline at end of file