Django Rest Frameworkを学ぼう! ~外部キーとシリアライズ~

こんにちは。KOUKIです。

前回は、ModelSerializerクラスについて学びました。

今回は、外部キーとシリアライズについて学びます。

前回

外部キーとJournalistモデル

外部キー(FOREIGN KEY)とは、関連したテーブル間を結ぶために設定する列を指し、「データの整合性をデータベースに保証させるため」に設定します。

DjangoのModelにもその設定が可能です。

例えば、これまで作成してきたArticleモデルの外部キーとして持たせるJournalistモデルを作成しましょう.

Journalistクラスを設定して、それをArticleクラスのauthor変数にForeignKeyで関連付けています。

マイグレーションを実行しましょう。

Foreign Keyで関連データをつなぐ処理を入れたので、既存のデータが入っている場合は、マイグレーションが失敗します。そのため、sqliteを削除しました。

Djangoでは、データ保存場所としてsqliteをデフォルトにしています。

ログインユーザーも作成します。

続いて、作成したJournalistクラスを管理画面に表示できるようにします。

下記のコマンドで、開発用サーバーを立ち上げましょう。

Journalistが追加されてますね。

ArticleとJournalisには、適当にデータを入れていてください。

http://localhost:8000/api/articles/」にアクセスして、データを確認します。

現時点だと、authorのデータは、「1」になっています。おそらく、Djangoが自動的に生成するid番号が表示されているのだと思います。

外部キーとシリアライズ

Articleモデルのauthorフィールドが外部キーであるため、ArticleSerializerクラスにauthor変数を定義します。

ブラウザを確認します。

authorのデータが「Harry Potter」に変わりました。

Journalistのシリアライズクラスを作成してみましょう。

作成したJournalistSerializerクラスをArticleSerializerクラスのauthor変数に代入しています。

画面をリロードしてください。

すごい!簡単ですね!!

しかし、これには問題があります。

以下のデータをContentに入力後、POSTを押下してください。

Articleモデルを更新するには、authorが必須のため、エラーになってしまいます。

リファクタリング

JournalistSerializerを以下のように修正します。

先ほどとは逆で、JournalistSerializerから、ArticleSerializerを読み込んでいます。

api/views.pyにJournalistのviewを追加しましょう。

urls.pyに以下を追加しましょう。

ここまで実装できたら「http://localhost:8000/api/journalists/」にアクセスしましょう。

OKですね。

Contentの中身に以下を入力してPOSTを押下してください。

新規ユーザー(id=2)が作成されました。

ハイパーリンクを設置しておきましょう。

HyperlinkedRelatedFieldを使うとハイパーリンクが生成されるようになります。

また、JournalistSerializerの呼び出し時にcontextを設定します。

ブラウザをリロードします。

articlesに「”http://localhost:8000/api/articles/1“」が貼られました。

これをクリックします。

Articleの詳細ページに飛びました。かなり便利ですよね。

おわりに

ここまでに、様々なDjango REST Frameworkの基本的な使い方を見てきました。

しかし、まだまだ氷山の一角です。

公式サイトを見ながら、色々な機能を試していきましょう!

それでは、また!

関連記事

こちらもどうぞ

Djangoおすすめ書籍

Djangoを学ぶなら以下の書籍がオススメです。

緑 -> 赤 -> 紫の順でやればOKです。読みやすい英語で書かれているので、英語力もついでに上がるかもしれません^^

コメントを残す