はじめに
前回、Django/GrapheneでGraphQLの実装を途中まで行い、エラーが発生した箇所で終ったので、その続きから調査を行う px-wing.hatenablog.com
前回のエラーはモデルを作成していないことによるエラーのようだったので、モデルを作成してみる
想定するテーブル

モデルの作成
- アプリケーション側のmodels.pyファイルに下記のようにモデルを作成する
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=255)
notes = models.TextField()
category = models.ForeignKey(
Category, related_name='articles', on_delete=models.CASCADE)
def __str__(self):
return self.title
Migrate
# python manage.py makemigrations
Migrations for 'boardapp':
boardapp/migrations/0001_initial.py
- Create model Category
- Create model Article
# python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, boardapp, contenttypes, sessions
Running migrations:
Applying boardapp.0001_initial... OK
プロジェクトのschema.pyを変更
import graphene
import boardapp.schema
class Query(boardapp.schema.Query, graphene.ObjectType):
# This class will inherit from multiple Queries
# as we begin to add more apps to our project
pass
schema = graphene.Schema(query=Query)
アプリケーションのschema.pyを変更
import graphene
from graphene_django.types import DjangoObjectType
from .models import Category, Article
class CategoryType(DjangoObjectType):
class Meta:
model = Category
class ArticleType(DjangoObjectType):
class Meta:
model = Article
class Query(object):
all_categories = graphene.List(CategoryType)
all_articles = graphene.List(ArticleType)
def resolve_all_categories(self, info, **kwargs):
return Category.objects.all()
def resolve_all_articles(self, info, **kwargs):
# We can easily optimize query count in the resolve method
return Article.objects.select_related('category').all()
テストデータを管理画面から作成する

GraphQLの実行

エラーの原因
- Django/GrapheneでGraphQL実装①のエラーの原因はschema.pyの記述が一部間違っていたので修正したところ解決できた