2017-10-26 84 views
0

私はDjangoモデルの移行に問題があります。 私のアプリにはいくつかのモデルがありますが、すでにデータがあります。 アプリケーションにいくつかのモデルを追加したところ、makemigrationsを実行すると、変更がないことをアプリは報告します。 マイグレーション時にいくつかのエラーが発生することがあるので、データベース内のdjango_migrationsテーブルを削除し、makemigrationsを再度実行して、新しいフィールドを見つけました。Djangoの移行:関係は既に存在します

問題は、私がmigrateシステムを実行すると、いくつかのテーブルがすでに存在しているということです。 (それは彼らが行うので、大丈夫で正しいです)。私はそれらのテーブルを削除したくありません。私はすでにデータが入っているからです。

プログラムは私がすでにすべてのテーブルを持っていると思うので、私はmigrate --fakeを実行できません。これは本当ではありません。

私はプログラムを教える方法を探しています:テーブルがスキップしている場合は、マイグレーションを実行してください。 (--fake it)

もう1つの質問は、私の変更が私の変更(いくつかのキャッシュの問題など)を認識しないのはなぜ私に起こっているのでしょうか?

+0

は[ '--fake-初期を見てください'](https://docs.djangoproject.com/en/1.11/topics/migrations/#initial-migrations)オプションです。 – Alasdair

答えて

0

この方法ではどうですか?

のpython manage.py makemigrations

(すでに準備移行ファイルを持っている場合は、このステップをスキップ)

そのパッケージが0001_initial.pyのような名前を持って言うことができますことは、移行を作成します。

ファイルを手動で編集して、データベースにすでに作成されているモデルを除くすべてのモデルを削除します。

今、あなたは偽の移行を行います。これにより、データベースとモデルが同期されます。

のpythonは、新しいマイグレーションファイルと一緒に作成されたテーブルの残りの部分を持っているために、再度makemigrationsを実行し

--fake移行manage.pyの。これらの変更は、すでに存在しているため

  1. 移行:makemigrationsは、あなたのモデルが原因のような理由からのものとすることができるrecogonizeなかったのはなぜあなたの他の質問、について

    のpython manage.pyのmakemigrations

    いくつかの移行ファイルにあります。

  2. あなたはINSTALLED_APPSでpackage_nameを言いましたが、ここでそれをやったと思います。
1

あなたのモデルに変更を加えるたびに、次の手順を試してみてください。そして、

python manage.py makemigrations [your app name] 

python manage.py migrate 

は、それが正常に動作する必要があります。テーブルにすでにデータ(行)がある場合は、クエリごとにデフォルト値を指定する必要があります。
ない場合、Djangoは彼らのために をデフォルト値を指定するプロンプトを表示したり、単に以下のようなあなたの分野でblank=Trueまたはnull=Trueを使用しようとすることができます:

website   = models.URLField(blank=True) 
関連する問題