Django 2.0リリース! 最新のDjangoで作るカンバンボードアプリ ~ モデルの定義とDjango REST frameworkの実装
モダンDjango入門 第2回
カンバンボード アプリケーション開発(2)
マイグレーション
モデルの定義が完成したので次は、データベースのテーブル作成方法を見ていきましょう。
Djangoでは以下の流れで、データベースのスキーマに変更を加えていきます。
- モデルの定義を編集
- 1の変更を元にマイグレーションファイルを作成
- マイグレーションを実行
マイグレーションファイルを作成するには、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を新規に作成してみましょう。
このように管理サイトでは、データのCRUD操作を簡単に行えます。アプリケーションの要件によっては、管理機能を自分で実装せずにDjangoの管理サイトで十分な場合も多いです。Djangoの大きな魅力のひとつですので、ぜひ活用してください。
この記事は参考になりましたか?
- モダンDjango入門連載記事一覧
-
- Djangoでの環境変数と、Angularを用いたフロントエンドの実装
- Djangoのテストの書き方とCircleCIを活用した継続的インテグレーション
- Django 2.0リリース! 最新のDjangoで作るカンバンボードアプリ ~ モデルの...
- この記事の著者
-
新井 正貴(アライ マサタカ)
東京大学文学部卒業、アライドアーキテクツ株式会社にて勤務。2016年4月、株式会社SQUEEZEに入社。コミュニティ活動として、PyCon JP 2015〜 スタッフ、Pythonもくもく会の主催を行う。趣味はラクロスとPerfume。 Site:http://massa142.github.io/ Twitter:@massa142 Facebook:新井 正貴
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
