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モデルが追加されているか見てみます。

sqlite browserでテーブルの中身をチェックする

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で追加されていることがわかります。

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

このエントリーをはてなブックマークに追加