mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-02-24 15:47:31 +03:00
84 lines
2.0 KiB
ReStructuredText
84 lines
2.0 KiB
ReStructuredText
|
Fields
|
||
|
======
|
||
|
|
||
|
Graphene-Django provides some useful fields to help integrate Django with your GraphQL
|
||
|
Schema.
|
||
|
|
||
|
DjangoListField
|
||
|
---------------
|
||
|
|
||
|
``DjangoListField`` allows you to define a list of :ref:`DjangoObjectType<queries-objecttypes>`'s. By default it will resolve the default queryset of the Django model.
|
||
|
|
||
|
.. code:: python
|
||
|
|
||
|
from graphene import ObjectType, Schema
|
||
|
from graphene_django import DjangoListField
|
||
|
|
||
|
class RecipeType(DjangoObjectType):
|
||
|
class Meta:
|
||
|
model = Recipe
|
||
|
fields = ("title", "instructions")
|
||
|
|
||
|
class Query(ObjectType):
|
||
|
recipes = DjangoListField(RecipeType)
|
||
|
|
||
|
schema = Schema(query=Query)
|
||
|
|
||
|
The above code results in the following schema definition:
|
||
|
|
||
|
.. code::
|
||
|
|
||
|
schema {
|
||
|
query: Query
|
||
|
}
|
||
|
|
||
|
type Query {
|
||
|
recipes: [RecipeType!]
|
||
|
}
|
||
|
|
||
|
type RecipeType {
|
||
|
title: String!
|
||
|
instructions: String!
|
||
|
}
|
||
|
|
||
|
Custom resolvers
|
||
|
****************
|
||
|
|
||
|
If your ``DjangoObjectType`` has defined a custom
|
||
|
:ref:`get_queryset<django-objecttype-get-queryset>` method, when resolving a
|
||
|
``DjangoListField`` it will be called with either the return of the field
|
||
|
resolver (if one is defined) or the default queryeset from the Django model.
|
||
|
|
||
|
For example the following schema will only resolve recipes which have been
|
||
|
published and have a title:
|
||
|
|
||
|
.. code:: python
|
||
|
|
||
|
from graphene import ObjectType, Schema
|
||
|
from graphene_django import DjangoListField
|
||
|
|
||
|
class RecipeType(DjangoObjectType):
|
||
|
class Meta:
|
||
|
model = Recipe
|
||
|
fields = ("title", "instructions")
|
||
|
|
||
|
@classmethod
|
||
|
def get_queryset(cls, queryset, info):
|
||
|
# Filter out recipes that have no title
|
||
|
return queryset.exclude(title__exact="")
|
||
|
|
||
|
class Query(ObjectType):
|
||
|
recipes = DjangoListField(RecipeType)
|
||
|
|
||
|
def resolve_recipes(parent, info):
|
||
|
# Only get recipes that have been published
|
||
|
return Recipe.objects.filter(published=True)
|
||
|
|
||
|
schema = Schema(query=Query)
|
||
|
|
||
|
|
||
|
DjangoConnectionField
|
||
|
---------------------
|
||
|
|
||
|
*TODO*
|