Django 入門編: Migrationについて

showmigrationsについて

showmigrationsコマンドはデータベースへの反映状態を確認するコマンドになります。

python3 manage.py showmigrations

プロジェクトの作成が完了したタイミングで、showmigrationsコマンドを実行します。

admin
 [ ] 0001_initial
 [ ] 0002_logentry_remove_auto_add
 [ ] 0003_logentry_add_action_flag_choices
auth
 [ ] 0001_initial
 [ ] 0002_alter_permission_name_max_length
 [ ] 0003_alter_user_email_max_length
 [ ] 0004_alter_user_username_opts
 [ ] 0005_alter_user_last_login_null
 [ ] 0006_require_contenttypes_0002
 [ ] 0007_alter_validators_add_error_messages
 [ ] 0008_alter_user_username_max_length
 [ ] 0009_alter_user_last_name_max_length
 [ ] 0010_alter_group_name_max_length
 [ ] 0011_update_proxy_permissions
contenttypes
 [ ] 0001_initial
 [ ] 0002_remove_content_type_name
sessions
 [ ] 0001_initial

これはデフォルトで用意されているmigrationファイルです。
「[ ]」となっている場合は、まだ未適応です。

migrateについて

migrateコマンドはmigrationファイルをデータベースに反映するコマンドです。

python3 manage.py migrate

実行した後、showmigrationsコマンドを実行します。

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

「[X]」と変更されました。
これで適応できたことになります。

makemigrationsについて

makemigrationsコマンドは、models.pyの内容からmigrationファイルを生成するコマンドです。
startappコマンドでアプリケーションを追加します。

python3 manage.py startapp django_applications

django_test/settings.pyのINSTALLED_APPSを変更します。

変更前

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

変更後

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_applications',
]

アプリケーションを追加後に、showmigrationsコマンドを実行すると下記の行が追加されています。

django_applications
 (no migrations)

django_applications/models.pyを変更していきます。
idは自動生成されるので不要です。

class DjangoApplications(models.Model):
    title = models.CharField(max_length=20)
    message = models.CharField(max_length=255)

これでmodels.pyの設定は完了です。

python3 manage.py makemigrations

makemigrationsコマンドを実行するとmigrationファイルが生成されます。
migrateコマンドを実行するとapplications_django_applicationsテーブルが作成されます。