質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

3371閲覧

Djangoのmodels.pyの反映(python manage.py makemigrations/migrate)

yamato_user

総合スコア2321

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/12 04:53

makemigrations/migrateの使い方がいまいちわかっていません。
まずは、下記コードをご覧下さい。
コードの途中途中に質問を挟んであります。
状況としては、今まで普通に使っていたDjangoのシステムで、makemigrations/migrateが失敗しました。

Python

1>>> python3.6 manage.py makemigrations 2 3Traceback (most recent call last): 4...省略... 5django.db.migrations.exceptions.InconsistentMigrationHistory: Migration myapp.0017_xxxxx is applied before its dependency myapp.0016_xxxxx on database 'default'

質問1:このエラー内容は何ですか?
となったので、下記を実行

Python

1rm -rf myapp/migrations/*

してから

Python

1>>> python3.6 manage.py makemigrations 2Migrations for 'myapp': 3 myapp/migrations/0001_initial.py 4 -Create model XXXX1 5 -Create model XXXX2 6 ...省略...

となって、一見うまくいったので、下記を実行

Python

1>>> python3.6 manage.py migrate 2 3Operations to perform: 4 Apply all migrations: admin, auth, contenttypes, django_db_logger, myapp, sessions 5Running migrations: 6 No migrations to apply. 7 Your models have changes that are not yet reflected in a migration, and so won't be applied. 8 Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

質問2:このエラー内容は、「もう一度makemigrationsしろ」ということでいいですか?
となったので、もう一度下記を実行

Python

1>>> python3.6 manage.py makemigrations 2 3Migrations for 'myapp': 4 myapp/migrations/0002_auto_20181212_1310.py 5 -Create model YYYY1 6 -Create model YYYY2 7 ...省略...

と出力され、先ほどのmakemigrationsとは違う内容が出力されました。
質問3:なぜ、先ほどのmakemigrationsとは違う内容が出力されたのでしょうか?models.pyもDBもいじっていません
ここで、もう一度下記を実行

Python

1>>> python3.6 manage.py migrate 2 3Operations to perform: 4 Apply all migrations: admin, auth, contenttypes, django_db_logger, myapp, sessions 5Running migrations: 6 Applying myapp.0002_auto_20181212_1310...Traceback (most recent call last): 7 ...省略... 8django.db.utils.OperationalError: (1050, "Table 'myapp_YYYY1' already exists")

となって、対処法がわからなかったので下記を実行
質問4:対処法は下記であっていますか?また、--fakeを付けると、全ての変更が無視されるのですか?それとも、エラーが出るところだけ、自動的に判別して、その個所は無視してくれるのでしょうか?

Python

1python3.6 manage.py migrate --fake

としたら、ひとまずエラーは出ませんでした。
質問5:結局の所、どう対処するのが正解だったのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

アプリケーションのmigrationsフォルダに、自動でmigrateする内容が保存されます。

エラーに出ている
0017_xxxxx は17番目
0016_xxxxx は16番目に作成されました。

エラーメッセージは、
0017は、0016よりも前に行ってください、とあります。依存関係のエラーです。

なので、
アプリケーションのmigrationsフォルダ内の
0016_xxxxx
0017_xxxxx
の二つのファイルをまず削除してください。

その上でもう一度ターミナルで、

python manage.py makemigrations

を行います。

で、最後に

python manage.py migrate

を行います。

そうすると多分、もともと0016_xxxxxと0017_xxxxxに分かれていたものが、0016_xxxxx一つにまとまります。

これにより、これにより0017が0016よりも前でないと…という依存関係が解消されます。

投稿2019/06/11 09:41

編集2019/06/11 09:45
ak_suzuki

総合スコア194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自分もあまり詳しくはないのでエラー内容云々の解説は出来ませんが、恐らく同じ状況で詰まり、解決した時の方法はこんな感じです。

python manage.py showmigrations

を実行して、各アプリケーション毎の読み込まれているmakemigrationsコマンドで作成したマイグレーションファイルを視覚化できることができます。
で、幾つか[X]で埋まっていますが、途中から[ ]のように空白が続くと思います。その先頭のファイルが原因なので、
・myapp\migrationsにある原因ファイルを削除(特定するのが面倒な自分は全部消して0001から始めました)
・makemigrationsコマンドで新しく作成
・migrateコマンドで読み込ませる
とモデルが反映されると思います。

また、新しく生成をしても読み込まれている状態になっていたら、

python manage.py migrate --fake myapp zero

で読み込まれていると誤認しているファイルを外し、もう一度migrateコマンドで読み込むと反映されます。

参考:django migrationのリセット方法

投稿2018/12/12 05:27

編集2018/12/12 07:41
nuko3

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問