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

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

ただいまの
回答率

90.47%

  • Python

    12249questions

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

  • Python 3.x

    10245questions

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

  • Django

    1694questions

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

  • Python 2.7

    1471questions

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

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

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 442

Woopen

score 1772

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

>>> python3.6 manage.py makemigrations

Traceback (most recent call last):
...省略...
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration myapp.0017_xxxxx is applied before its dependency myapp.0016_xxxxx on database 'default'


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

rm -rf myapp/migrations/*


してから

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


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

>>> python3.6 manage.py migrate

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


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

>>> python3.6 manage.py makemigrations

Migrations for 'myapp':
  myapp/migrations/0002_auto_20181212_1310.py
    -Create model YYYY1
    -Create model YYYY2
    ...省略...


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

>>> python3.6 manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, django_db_logger, myapp, sessions
Running migrations:
  Applying myapp.0002_auto_20181212_1310...Traceback (most recent call last):
  ...省略...
django.db.utils.OperationalError: (1050, "Table 'myapp_YYYY1' already exists")


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

python3.6 manage.py migrate --fake


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

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

python manage.py showmigrations

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

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

python manage.py migrate --fake myapp zero


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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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よりも前でないと…という依存関係が解消されます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    12249questions

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

  • Python 3.x

    10245questions

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

  • Django

    1694questions

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

  • Python 2.7

    1471questions

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