GraphQL Types¶
Each of the field types in last chapter correspond to an outputted GraphQL
(or more specifically Graphene) type. Many are self-explanatory such as
GraphQLString
or GraphQLFloat
, but some have a sub-selection which we
detail below.
An existing understanding of GraphQL types will help here.
ImageObjectType¶
Any image-based field type (whether GraphQLImage
or StreamField block) will
return a ImageObjectType
. Images can be queried via the images
field on
the root query type like so:
query {
images {
src
}
}
ImageObjectType
describes a Wagtail image and provides the following fields:
id: ID!
collection: CollectionObjectType!
title: String!
file: String!
width: Int!
height: Int!
createdAt: DateTime!
focalPointX: Int
focalPointY: Int
focalPointWidth: Int
focalPointHeight: Int
fileSize: Int
fileHash: String!
url: String!
aspectRatio: Float!
sizes: String!
tags: [TagObjectType!]!
rendition(
max: String
min: String
width: Int
height: Int
fill: String
format: String
bgcolor: String
jpegquality: Int
webpquality: Int
preserveSvg: Boolean
): ImageRenditionObjectType
srcSet(
sizes: [Int]
format: String
preserveSvg: Boolean
): String
isSvg: Boolean!
ImageRenditionObjectType
describes a Wagtail image rendition and provides the following fields:
id: ID!
filter_spec = String!
file: String!
width: Int!
height: Int!
focal_point_key = String!
image: ImageObjectType!
focalPoint: String
url: String!
alt = String!
backgroundPositionStyle = String!
DocumentObjectType¶
Very similar to ImageObjectType
; Is returned when using GraphQLDocument
or by a StreamField block.
The following fields are returned:
id: ID
title: String
file: String
createdAt: DateTime
fileSize: Int
fileHash: String
SnippetObjectType¶
You won’t see much of SnippetObjectType
as it’s only a Union type that
groups all your Snippet models together. You can query all the available snippets
under the snippets
field under the root Query, The query is similar to
an interface but SnippetObjectType
doesn’t provide any fields itself.
When snippets are attached to Pages you interact with your generated type itself as opposed to an interface or base type.
An example of querying all snippets:
query {
snippets {
...on Advert {
id
url
text
}
}
}
SettingObjectType¶
Similar to SnippetObjectType
, Settings are grouped together under the
SettingObjectType
union. You can then query any settings that you have
appended a graphql_fields
list to like so:
query {
settings {
...on SocialMediaSettings {
facebook
instagram
youtube
}
}
}
You can also query a setting by model name:
query {
setting(name: "SocialMediaSettings") {
...on SocialMediaSettings {
facebook
instagram
youtube
}
}
}
SiteObjectType¶
Field type based on the Wagtail’s Site
model. This is accessible through
the sites
or site
field on the root query type. Available fields for the
SiteObjectType
are:
id: ID
port: Int
siteName: String
hostname: String
isDefaultSite: Boolean
rootPage: PageInterface
page(id: Int, slug: String, urlPath: String, contentType: String, token: String): PageInterface
pages(limit: PositiveInt, offset: PositiveInt, order: String, searchQuery: String, id: ID): [PageInterface]
The plural sites
field can be queried like so:
query {
sites {
port
hostname
}
}
The singular site
field accepts the following arguments:
# Either the `id` or `hostname` must be provided.
id: ID
hostname: String
and can be queried like so:
query {
site(hostname: "my.domain") {
pages {
title
}
}
}
Search¶
You can also simply search all models via GraphQL like so:
query {
search(query:"blog") {
...on BlogPage {
title
}
}
}