Django2系とdjango rest frameworkでモデルを作成する
環境のセットアップが完了したので、今回はモデルを作成します。
前回作成したflowersフォルダ内にmodels.pyというファイルが生成されているので、
そのファイルを編集します。
defaultでは、以下のようになっています。
from django.db import models
# Create your models here.
ここにコードを以下のように追加します。
from django.db import models
class Flower(models.Model):
created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=150, blank=False, default='')
description = models.CharField(max_length=250, blank=True, default='')
flower_category = models.CharField(max_length=200, blank=False, default='')
release_date = models.DateTimeField()
was_included_in_home = models.BooleanField(default=False)
class Meta:
ordering = ('name',)
Flowerクラスはdjango.db.models.Modelを継承しています。
詳細は、公式のリンク先を...
modelを継承したクラス内に、変数を追加すればそれがカラムとして認識されます。
各々がどのように定義されているかは、コードを読めばなんとなくわかるはず。
で、model内にrelational dbで定義されるidの項目がありませんが、
Djangoでは、defaultでattributeが auto increment integer 'id'として、データの中に入ってくるので、
定義していません。
model内のmeta class
modelクラス内にmetaというクラスを以下のように定義しています。
metaクラスには、カラムの並び順など、metaデータの定義をします。
class meta:
ordering = ('name',)
orderingが意味しているように'name'カラムを基準にdefaultである昇順に並び替えています。
逆にしたい場合は、'-name'とします。
その他のオプションは公式のリンクを貼っておいたので、そちらを...
DBにmigrateする
作成したFlowerモデルをmigrateしましょう
migrateとは、modelに追加したカラムをDBに追加する作業です(と思っています)。
migrateするには、manage.pyをオプション付きで実行します。
まず、flowers modelのmigrateを実行するためのpythonファイルを作成します。
manage.pyはrestful01フォルダ内にあるので、フォルダ内に移動して以下のコマンドを叩きます。
python manage.py makemigrations flowers
例:
python manage.py mikemigrations 'アプリ名'
Djangoの設定のところで、apps.pyのFlowersConfig内で、flowersとアプリ名を定義しました。
mikemigrations コマンドに成功すると以下のようなログが出力されます。
Migrations for 'flowers':
flowers/migrations/0001_initial.py
- Create model Flower
ログに出力されているように、0001_initial.py内にモデルを作成するためのコードが作られます。
migrateするための実行ファイルが作られたら、以下のコマンドを叩いて、migrateします。
python manage.py migrate
migrateに成功すると、以下のようにログに出力されます。
Operations to perform:
Apply all migrations: admin, auth, contenttypes, flowers, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying flowers.0001_initial... OK
Applying sessions.0001_initial... OK
そして、MyRestfulApi/restful01フォルダ内にflowersモデルが反映された
db.sqliteが生成されます。
SQLite Database Browserというツールを使って、flowerモデルが追加されているか見てみます。
flowers_flowerテーブルがdefaultで生成されるテーブルと共に生成されています。
migrateした際に生成されるテーブル一覧
以下が、defaultで生成されるテーブルのざっくりとした中身の一覧です。
auth_group | 認証グループを保存する |
auth_group_permissions | 認証グループのpermissionを保存する |
auth_permission | 認証のためのpermissionを保存する |
auth_user | 認証ユーザを保存する |
auth_user_groups | 認証ユーザのグループを保存する |
auth_user_groups_permissions | 認証グループユーザのpermissionを保存する |
django_admin_log | Djangoの管理者ログを保存する |
django_content_type | Djangoのcontent typeを保存する |
django_migrations | Djangoによってmigrateされたスクリプトや、それが適応された日付や時間を保存する |
django_session | Djangoセッションを保存する |
sqlite_sequence | SQLiteのSequenceを保存する |
では、flowers tableの中身をみてみましょう
idがdefaultで追加されていることがわかります。
- id: The integer primary key, an autoincrement row
- created: DateTime
- name: varchar(150)
- description: varchar(250)
- flower_category: varchar(200)
- release_date: DateTime
- was_included_in_home: bool
DjangoにおけるDataBaseの設定
migrateコマンドを実行すると、sqlite3のdatabaseが作成されますが、
dbの設定は、restful01/settings.pyに書かれています。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
後にmysqlに変えたいと思いますが、
とりあえずこれで、モデルの作成からDBの作成までができました。
初版:2018/5/18 更新:2018/5/19