From 532ffbe30cbeab8a0f14f3fb2bbc2ce7856767ce Mon Sep 17 00:00:00 2001 From: VirajAdiga Date: Sun, 14 Apr 2024 11:56:52 +0530 Subject: [PATCH] Feature - Get related user stories info with project details --- taiga/projects/api.py | 4 ++++ taiga/projects/serializers.py | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/taiga/projects/api.py b/taiga/projects/api.py index 958cf06f..2453d984 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -7,6 +7,8 @@ import uuid import functools + +from django.db.models import Prefetch from easy_thumbnails.source_generators import pil_image from dateutil.relativedelta import relativedelta @@ -101,6 +103,8 @@ def _get_order_by_field_name(self): def get_queryset(self): qs = super().get_queryset() qs = qs.select_related("owner") + user_stories_qs = UserStory.objects.all().select_related("status", "assigned_to") + qs = qs.prefetch_related(Prefetch("user_stories", queryset=user_stories_qs)) if self.request.QUERY_PARAMS.get('discover_mode', False): qs = project_utils.attach_members(qs) qs = project_utils.attach_notify_policies(qs) diff --git a/taiga/projects/serializers.py b/taiga/projects/serializers.py index f485325c..96859d72 100644 --- a/taiga/projects/serializers.py +++ b/taiga/projects/serializers.py @@ -20,6 +20,7 @@ from . import services from .notifications.choices import NotifyLevel +from .userstories.serializers import UserStoryLightSerializer, UserStoryListSerializer ###################################################### @@ -441,6 +442,9 @@ class ProjectDetailSerializer(ProjectSerializer): transfer_token = Field() milestones = MethodField() + # User stories related to the project + user_stories = MethodField() + def get_milestones(self, obj): assert hasattr(obj, "milestones_attr"), "instance must have a milestones_attr attribute" if obj.milestones_attr is None: @@ -509,6 +513,9 @@ def get_is_private_extra_info(self, obj): def get_max_memberships(self, obj): return services.get_max_memberships_for_project(obj) + def get_user_stories(self, obj): + return UserStoryLightSerializer(obj.user_stories.all(), many=True).data + class ProjectLightSerializer(serializers.LightSerializer): id = Field()