Some optimization on get project from the api

remotes/origin/enhancement/email-actions
Jesús Espino 2014-05-19 16:47:47 +02:00
parent bb595b8fdd
commit 7634ab5078
1 changed files with 10 additions and 4 deletions

View File

@ -92,9 +92,9 @@ class ProjectSerializer(serializers.ModelSerializer):
class ProjectDetailSerializer(ProjectSerializer): class ProjectDetailSerializer(ProjectSerializer):
list_of_milestones = serializers.SerializerMethodField("get_list_of_milestones") #list_of_milestones = serializers.SerializerMethodField("get_list_of_milestones")
roles = serializers.SerializerMethodField("get_list_of_roles") roles = serializers.SerializerMethodField("get_list_of_roles")
memberships = ProjectMembershipSerializer(many=True, required=False) memberships = serializers.SerializerMethodField("get_membership")
active_memberships = serializers.SerializerMethodField("get_active_membership") active_memberships = serializers.SerializerMethodField("get_active_membership")
us_statuses = UserStoryStatusSerializer(many=True, required=False) # User Stories us_statuses = UserStoryStatusSerializer(many=True, required=False) # User Stories
points = PointsSerializer(many=True, required=False) points = PointsSerializer(many=True, required=False)
@ -104,8 +104,13 @@ class ProjectDetailSerializer(ProjectSerializer):
issue_statuses = IssueStatusSerializer(many=True, required=False) issue_statuses = IssueStatusSerializer(many=True, required=False)
issue_types = IssueTypeSerializer(many=True, required=False) issue_types = IssueTypeSerializer(many=True, required=False)
def get_membership(self, obj):
memberships = obj.memberships.order_by('user__first_name', 'user__last_name', 'user__username').select_related("role", "user")
serializer = ProjectMembershipSerializer(memberships, many=True)
return serializer.data
def get_active_membership(self, obj): def get_active_membership(self, obj):
memberships = obj.memberships.filter(user__isnull=False).order_by('user__first_name', 'user__last_name', 'user__username') memberships = obj.memberships.filter(user__isnull=False).order_by('user__first_name', 'user__last_name', 'user__username').select_related("role", "user")
serializer = ProjectMembershipSerializer(memberships, many=True) serializer = ProjectMembershipSerializer(memberships, many=True)
return serializer.data return serializer.data
@ -139,7 +144,8 @@ class ProjectDetailSerializer(ProjectSerializer):
"client_increment_points": milestone.client_increment_points, "client_increment_points": milestone.client_increment_points,
"team_increment_points": milestone.team_increment_points, "team_increment_points": milestone.team_increment_points,
"closed": milestone.closed "closed": milestone.closed
} for milestone in obj.milestones.all().order_by("estimated_start")] } for milestone in obj.milestones.prefetch_related("user_stories", "user_stories__role_points", "user_stories__role_points__points").order_by("estimated_start")]
# TODO: Refactor this (too much prefetch related)
return milestones_list return milestones_list