[python] DJangoでAPI的なものを作る その2 モデルを作る
Djangoのモデルとは、いわゆるDBのテーブルの事。
DJangoを使わない場合は、テーブル設計をして、テーブルへのDAOを作ったりしていかないと行けないですが、このモデルを使用すると
リレーションやらその辺を深く意識せずにテーブルを作成することが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from django.db import models # Create your models here. class TaskStatus(models.Model): status = models.CharField(max_length=50) def __unicode__(self): return self.status class Task(models.Model): status = models.ForeignKey(TaskStatus, null=False, related_name="t_status") task_name = models.CharField(max_length=50) def __unicode__(self): return self.task_name |
前回作成した polls の中に上のようなスクリプトを書きました。
models.py に書かれたクラス1つがDBのテーブル1つ
クラスの変数として定義している ~Fieldは、テーブルのフィールドに相当しています。
例)住所録=テーブル 名前・住所などの要素=フィールド
今回は、かんたんなタスク管理(ステータスと、内容があるのみ)をつくってみます。
Taskのステータスは、いくつかの要素からチェックボックスやコンボボックスのようなもので
選択式、選択肢は上限できるようにしたいのでTaskStatus部分は別テーブルとして定義してあげます。
TaskStatus側の ForeignKey は、多対一の関係を定義するもので、
TaskStatusの複数ある要素のうち、1つを使いたいような場合に紐付けする機能をもっています。
定義が終わったら、このmodelsをDBのテーブルに反映します。
1 2 3 4 |
python manage.py makemigrations python manage.py migrate |
反映するときには、上のコマンドを実行します。
makemigrations を実行すると、アプリのフォルダ内のmigrationsにマイグレーションファイルとよばれる .py が生成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ] operations = [ migrations.CreateModel( name='Task', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('task_name', models.CharField(max_length=50)), ], ), migrations.CreateModel( name='TaskStatus', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('status', models.CharField(max_length=50)), ], ), migrations.AddField( model_name='task', name='status', field=models.ForeignKey(related_name='t_status', to='polls.TaskStatus'), ), ] |
中身はこんな感じになってます。
マイグレーションとは、
プログラムやデータ、OSなどの環境やプラットフォームを移行、変換すること。
という意味で、DJangoの場合は models.py → DBへの変換のことをマイグレーションと呼ぶようです。
migrationファイルを作成したあとに migrate を実行すると、DBに変更が反映されます。
API部分を作るまえに、DJangoのAdmin画面機能を使用して
テーブルがちゃんと作れているかを確認してみます。
まず、admin.pyを編集します。
1 2 3 4 5 6 7 8 9 10 |
from django.contrib import admin # Register your models here. from .models import Task,TaskStatus admin.site.register(Task) admin.site.register(TaskStatus) |
Admin画面で確認・編集したいmodelsを、上のように admin.site.register(モデルクラス名)でセットしてあげます。
さいごに、Admin画面に入るためのユーザーを作成します。
1 2 3 |
python manage.py createsuperuser |
ユーザー → メールアドレス(XXX@XXX.XXの形式なら適当でOK) → パスワード → パスワード(再度) の順で入力します。
できたら、サーバーを起動して、
http://127.0.0.1:8000/admin/
にアクセスしてみます。
特に何も作らなくても、簡単な管理画面がつくれてしまうのもDjangoの良いところです。
Taskのタブの中を見ると、modelsで定義したフィールドがセットできるようになっています。
Status部分はタブ選択と + で要素が追加出来るようになっています。
Taskの+のところで要素を追加した後に、TaskStatusタブを見ると
追加された要素が表示されています。
次回はURLからアクセスして登録する所までを作るまでで
つづく!