class ProjectDetailSerializer(ProjectSerializer): us_statuses = UserStoryStatusSerializer(many=True, required=False) # User Stories points = PointsSerializer(many=True, required=False) task_statuses = TaskStatusSerializer(many=True, required=False) # Tasks issue_statuses = IssueStatusSerializer(many=True, required=False) issue_types = IssueTypeSerializer(many=True, required=False) priorities = PrioritySerializer(many=True, required=False) # Issues severities = SeveritySerializer(many=True, required=False) userstory_custom_attributes = UserStoryCustomAttributeSerializer(source="userstorycustomattributes", many=True, required=False) task_custom_attributes = TaskCustomAttributeSerializer(source="taskcustomattributes", many=True, required=False) issue_custom_attributes = IssueCustomAttributeSerializer(source="issuecustomattributes", many=True, required=False) roles = ProjectRoleSerializer(source="roles", many=True, read_only=True) members = serializers.SerializerMethodField(method_name="get_members") def get_members(self, obj): qs = obj.memberships.filter(user__isnull=False) qs = qs.extra(select={"complete_user_name":"concat(full_name, username)"}) qs = qs.order_by("complete_user_name") qs = qs.select_related("role", "user") serializer = ProjectMemberSerializer(qs, many=True) return serializer.data
def get_roles(self, obj): serializer = ProjectRoleSerializer(obj.roles.all(), many=True) return serializer.data