92

South についてはすでに同様の質問がありますが、私は Django 1.7 でプロジェクトを開始し、South を使用していません。

開発中に多くの移行が作成されましたが、ソフトウェアはまだ配信されておらず、移行する必要があるデータベースはありません。したがって、現在のモデルが元のモデルであるかのように移行をリセットし、すべてのデータベースを再作成したいと思います。

それを行うための推奨される方法は何ですか?

編集: Django 1.8 の時点で、squashmigrationsという名前の新しいコマンドがあり、ここで説明されている問題を多かれ少なかれ解決します。

4

11 に答える 11

36

移行の Django 1.7 バージョンでは、南部にあったリ​​セット機能が削除され、移行を「押しつぶす」ための新しい機能が採用されました。これは、移行の数を抑える良い方法であると考えられています。

https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations

それでも本当にゼロから始めたい場合は、移行テーブルを空にして移行を削除してからmakemigrations再度実行することで可能だと思います。

于 2014-05-20T09:17:00.817 に答える
6
  1. ファイルの削除: delete_migrations.py (prj のルート):
import os

for root, dirs, files in os.walk(".", topdown=False):
  for name in files:
      if '/migrations' in root and name != '__init__.py':
          os.remove(os.path.join(root, name))
  1. DELETE FROM django_migrations Where app in ('app1', 'app2');

  2. ./manage.py makemigrations

  3. ./manage.py 移行 --偽物

または、このすべてから移行を書くことができます

于 2016-03-01T08:35:48.340 に答える
3

以前の移行を気にしない場合は、 migrations/ ディレクトリ内のすべての移行を削除するのはどうですか? モデル全体を作成したかのように、現在のモデルを参照として使用して、移行シーケンスを最初から開始します。

削除するほど信頼できない場合は、代わりにそれらを削除してください。

于 2014-09-04T19:55:49.513 に答える
1

簡単な方法は

すべてのアプリに移動し、移行ファイルを削除します。

次に、データベースの django-migrtaions テーブルに移動し、それを切り捨てます (すべてのエントリを削除します)。

その後、もう一度移行を作成できます。

于 2016-09-06T11:36:15.853 に答える
0

アプリの各「移行」フォルダーを (手動で) 削除した後、以下を実行しました。

./manage.py dbshell
delete from django_migrations;

./manage.py makemigrationsそれから私はそれらをすべて再生するためにできることを考えました。ただし、変化は検出されませんでした。次に、一度に 1 つのアプリを指定してみました: ./manage.py makemigrations foo, ./manage.py makemigrations bar. ただし、これにより循環依存関係が発生し、解決できませんでした。

最後に、すべてのアプリを指定する単一の makemigrations コマンドを実行しました (順不同)。

./manage.py makemigrations foo bar bike orange banana etc

今回はうまくいきました - 循環依存関係は自動的に解決されました (必要に応じて追加の移行ファイルが作成されました)。

その後、私は走ることができ./manage.py migrate --fake、ビジネスに戻りました。

于 2016-11-04T18:23:16.000 に答える