SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

モダンDjango入門

Django 2.0リリース! 最新のDjangoで作るカンバンボードアプリ ~ モデルの定義とDjango REST frameworkの実装

モダンDjango入門 第2回

カンバンボード アプリケーション開発(2)

マイグレーション

 モデルの定義が完成したので次は、データベースのテーブル作成方法を見ていきましょう。

 Djangoでは以下の流れで、データベースのスキーマに変更を加えていきます。

  1. モデルの定義を編集
  2. 1の変更を元にマイグレーションファイルを作成
  3. マイグレーションを実行

 マイグレーションファイルを作成するには、manage.py makemigrationsコマンドを使います。makemigrationsコマンドは、INSTALLED_APPSに登録されているアプリケーションのモデルの変更を検知し、テーブル作成やカラム変更に必要なマイグレーションファイルを作成します。ここではTicketモデルが新規に作成されるので、CREATE文を実行するマイグレーションファイルが作成されます。

(env) $ python manage.py makemigrations
Migrations for 'board':
  kanban/board/migrations/0001_initial.py
    - Create model Ticket

 次にmanage.py migrateコマンドでマイグレーションを実行して、データベースのスキーマを変更します。migrateコマンドは、makemigrationsと同様にINSTALLED_APPSに登録されているアプリケーションのマイグレーションファイルを参照し、データベースに対する操作を行います。ここでは先ほど作成したboardアプリケーションの0001_initial.pyが実行されます。

(env) $ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, board, contenttypes, sessions
Running migrations:
  Applying board.0001_initial... OK

 テーブルの作成が完了したので確認してみましょう。sqlite3コマンドでもよいですが、今回はmanage.py dbshellコマンドを使います。dbshellはプロジェクトのデータベース設定を元に、該当するデータベースのシェルを起動します。

(env) $ python manage.py dbshell
SQLite version 3.16.0 2016-11-04 19:09:39
Enter ".help" for usage hints.
sqlite> .schema board_ticket
CREATE TABLE "board_ticket" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "created" datetime NOT NULL, "modified" datetime NOT NULL, "name" varchar(100) NOT NULL, "description" text NOT NULL, "status" smallint NOT NULL, "start" date NULL, "end" date NULL, "assignee_id" integer NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "board_ticket_assignee_id_575ed467" ON "board_ticket" ("assignee_id");

 board_ticketテーブルとそのインデックスを作成するためのCREATE文が実行されたことを確認できました。

管理サイトへの登録

 このTicketモデルを管理サイトからCRUD編集できるように設定しましょう。kanban/board/admin.pyを次のように編集します。

from django.contrib import admin

from .models import Ticket

admin.site.register(Ticket)

 これだけで登録は完了です。開発サーバを起動して、管理サイトにログインしてみましょう。

(env) $ python manage.py runserver

 http://127.0.0.1:8000/adminにアクセスすると、新しくboardアプリケーション用の項目が追加されていることがわかります。

管理サイト トップページ
管理サイト トップページ

 ここからticketを新規に作成してみましょう。

管理サイト ticket新規作成
管理サイト ticket新規作成

 このように管理サイトでは、データのCRUD操作を簡単に行えます。アプリケーションの要件によっては、管理機能を自分で実装せずにDjangoの管理サイトで十分な場合も多いです。Djangoの大きな魅力のひとつですので、ぜひ活用してください。

次のページ
Django REST framework(1)

この記事は参考になりましたか?

モダンDjango入門連載記事一覧

もっと読む

この記事の著者

新井 正貴(アライ マサタカ)

 東京大学文学部卒業、アライドアーキテクツ株式会社にて勤務。2016年4月、株式会社SQUEEZEに入社。コミュニティ活動として、PyCon JP 2015〜 スタッフ、Pythonもくもく会の主催を行う。趣味はラクロスとPerfume。 Site:http://massa142.github.io/ Twitter:@massa142 Facebook:新井 正貴

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10722 2018/03/15 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー