モデルの作成からマイグレーションの作成・削除までの流れ
・モデルの作成〜マイグレーション
・マイグレーションを一つ前の状態に戻す
・マイグレーションを全て初期化
モデルの作成
User/models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=20)
マイグレーションファイルの作成
ターミナル
# python manage.py makemigrations アプリ名 --name マイグレーションファイル名
python manage.py makemigrations User --name add_user
--name
を付けることでマイグレーションファイルの名前を指定する事ができる
マイグレートしてデータベースに反映
ターミナル
# python manage.py migrate アプリ名
python manage.py migrate User
マイグレーションの状況確認
ターミナル
python manage.py shoemigrations User
User
[X] 0001_add_user
showmigrations
コマンドを実行するとマイグレーションの状況が確認できます。
マイグレーションファイル名の左にある角カッコの中がXとなっている場合はデータベースに反映された状態です。([X])
角カッコの中に何も表示されていない場合はデータベースに反映されていません
マイグレーションを一個前の状態に戻す場合
Userアプリに新しくPostテーブルのモデルを作成し、データベースに反映させた後、Postテーブルを反映させる前の状態に戻す方法
User/models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=20)
#Postテーブルを追加
class Post(models.Model):
title = models.CharField(max_length=30)
マイグレーションを作成し、データベースに反映
ターミナル
#マイグレーションファイル作成
python manage.py makemigrations User --name add_post
User/migrations/0002_add_post.py
#マイグレート
python manage.py migrate User
Applying User.0002_add_post... OK
#マイグレーション状況確認
python manage.py showmigrations User
[X] 0001_add_user
[X] 0002_add_post
この状態からPostを反映させる前の状態に戻すには、migrate
コマンドのアプリ名の後に一つ前のマイグレーションファイル名を指定します。
ターミナル
python manage.py migrate User 0001_add_user
#マイグレーション状況の確認
python manage.py showmigrations User
[X] 0001_add_user
[ ] 0002_add_post
0002_add_postのXがなくなっていると思います。
この状態でmigrationsフォルダの中にある「0002_add_post.py」を削除します。
マイグレーションを全て初期化
マイグレーションを全て初期化するにはpython manage.py アプリ名 zero
とします。
ターミナル
#マイグレーション状況確認
python manage.py showmigrations User
[X] 0001_add_user
# 0001_add_userをマイグレート前に戻す
python manage.py migrate User zero
#マイグレーション状況の確認
python manage.py showmigrations User
[ ] 0001_add_user