DjangoGraphQLRelay

Django Graphene 튜토리얼 따라하기 4

2020.01.01


GraphQL Schema에 대하여 좀 더 알아보면서,

mutation을 추가하는 방법에 대하여 알아봅니다.

Github 소스코드

7. graphene.Schema - Mutation 추가

import graphene

class Query(graphene.ObjectType):
  pass
class Mutation(graphene.ObjectType):
  pass
schema = graphene.Schema(query=Query, mutation=Mutation)

graphene.Schema 객체는 GraphQL 서버가 data 모델을 이해하도록, 그리고 각 method들을 resolve 해주는 역할을 합니다. 그래서 위와 같은 구조를 가져야 합니다.

root위치에 있는 schema.py를 변경해봅니다.

# schema.py
import graphene
import ingredients.schema

class Query(ingredients.schema.Query, graphene.ObjectType):
    pass

# Mutation class 추가
class Mutation(ingredients.schema.RelayMutation, graphene.ObjectType):
    pass

schema = graphene.Schema(query=Query, mutation=Mutation)
  • 우리는 RelayMutation에 해당하는 class를 작성해주면 됩니다.
# ingredients/schema.py

# import 첫줄에서 추가로 import 합니다.
from graphene import relay, ObjectType, AbstractType, String

# ...

# 맨 밑에 다음 코드를 작성해봅니다.

# CategoryCreate 클래스는 Mutation 1개에 해당합니다.
# CategoryUpdate, CategoryDelete 와 같은 클래스 구현 방법은 github을 참고하세요.
class CategoryCreate(relay.ClientIDMutation):
    category = relay.Node.Field(CategoryNode)

    class Input:
        name = String(required=True)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **kwargs):
        name = kwargs.get('name')
        category = Category(name=name)
        category.save()
        return CategoryCreate(category=category)

# RelayMutation 클래스에는 Mutation들을 집어넣어주면 됩니다.
class RelayMutation(AbstractType):
    category_create = CategoryCreate.Field()