Django GraphQLのMutationで新規作成

2019年12月6日

Djangoで構築したGraphQLにおいて、ミューテーション(Mutation)を実装します。

 

環境

Django==2.2.6

graphene==2.1.8

 

DjangoにおいてGraphQLサーバを構築した手順およびqueryによってレスポンスを確認するまでの説明は、下記関連ページをご覧下さい。本記事においても、myprojectプロジェクトおよびmyappアプリケーションの作成済みを前提に話を進めていきます。

 

関連ページ

GraphQLの実装 [Graphene]

 

 

GraphQLのミューテーション(Mutation)は、REST APIでいう主にPOSTやPUTおよびDELETEに該当し、データの更新をおこなうことができます。

 

本記事では下記のように1対多(One to Many)の関係を持つClubとMemberの2つのモデルを用意し、それぞれのモデルに対してデータを新規作成する実装をおこないます。

 

myproject/myapp/models.py

 

関連ページ

ForeignKeyで1対多のモデルを構築

 

 

まずはClubのMutationを実装し、実際にデータを追加してみます。

 

myproject/myapp/schema.py

28・29行目

ミューテーション実行後のレスポンスを定義しています。

 

31・32行目

ミューテーション時にサーバへ送信する引数を定義しています。ミューテーションの「name:”野球”」の部分です(後述)。

 

45行目

create_clubのようにアンダーバーで単語をつないだスネークケースの場合、ミューテーション側での記述ではcreateClubのようにキャメルケースに変換する必要があります(後述)。

 

 

myprojectディレクトリ内のschema.pyを編集します。

 

myproject/myproject/schema.py

 

GraphiQLからデータを1件追加します。

 

GraphiQL画面

 

3件の適当なデータを追加したのちクエリを実行。

 

 

上述したCreateClubクラスは、InputObjectTypeを利用して下記のように記述することができます。また、レスポンスの定義部分もClubTypeでまとめてあります(6行目)。

 

ミューテーションも下記のように記述する必要があります。2行目のinputは、上述したコード 9行目の名前と一致させる必要があります(※input_memberのようなスネークケースの場合は、ミューテーション側ではキャメルケースで記述する)。本記事のモデルでは恩恵はありませんが、InputObjectTypeは入れ子になった入力のオブジェクトを生成する際に利用します。

 

 

次にMemberのMutationを実装し、実際にデータを追加してみます。

 

schema.pyに下記コードを追記(ハイライト部分)します。

16行目

club_idはマイグレーション時に自動で生成されたカラム名です。

 

GraphiQLからデータを1件追加します。

 

GraphiQL画面

 

適当なメンバーを追加したのちクエリを実行。

 

 

 

 

参照ページ


 

HOW TO GRAPHQL

Mutations

 

Graphene Python

Mutations

 

 

 

LINEで送る
Pocket

定番本
定期本
 
Copyright © 2020 思考の葉 All Rights Reserved.  プライバシーポリシー