Unions¶
Union types are very similar to interfaces, but they don’t get to specify any common fields between the types.
The basics:
- Each Union is a Python class that inherits from
graphene.Union
. - Unions don’t have any fields on it, just links to the possible ObjectTypes.
Quick example¶
This example model defines several ObjectTypes with their own fields.
SearchResult
is the implementation of Union
of this object types.
import graphene
class Human(graphene.ObjectType):
name = graphene.String()
born_in = graphene.String()
class Droid(graphene.ObjectType):
name = graphene.String()
primary_function = graphene.String()
class Starship(graphene.ObjectType):
name = graphene.String()
length = graphene.Int()
class SearchResult(graphene.Union):
class Meta:
types = (Human, Droid, Starship)
Wherever we return a SearchResult type in our schema, we might get a Human, a Droid, or a Starship. Note that members of a union type need to be concrete object types; you can’t create a union type out of interfaces or other unions.
The above types have the following representation in a schema:
type Droid {
name: String
primaryFunction: String
}
type Human {
name: String
bornIn: String
}
type Ship {
name: String
length: Int
}
union SearchResult = Human | Droid | Starship