2017-07-06 5 views
1

モデルと移行ファイルで「app1」という名前のdjangoアプリケーションがあります。 私はこのアプリの名前を「app2」に変更し、すべてのインポート、URLを修正しました... しかし、テーブル内の移行ファイルとデータに問題があります。 私が保証するために正しい方法で移行を書くことができます方法: - 新規インストール=>新しいテーブル を作成 - 更新古いバージョン=>、新しいテーブルを作成してデータを移動し、Djangoの名前を変更するアプリケーションと移行

PS古いテーブルを削除します。いくつかのテーブルがあります多くのFKとここで

は、私は良い方法の午前かどうかわからないです、私の進捗状況です: - すべての古い移行は 削除 - 私は自分のアプリケーションをインストールすることができ、この2つのステップの後に新しいマイグレーションを生成するmakemigrationsファイル

を、しかし、古いバージョンにはまだ問題があります。

質問:データを移行する最適な方法は何ですか?

PS:私は南を使用していません。

答えて

1

私だが、古いアプリ名でテーブルを作成するための新しいFKと新しいアプリケーションの依存関係

2 - 力古い移行と

の1-修正古い移行を働く解決策を見つけたので、その旅館migrations.CreateModelについて.options、add 'db_table:' app1_table_name '

各マイグレーションファイルのaddは、置き換え= [(' app1 '、' migration_file_name ')]です。これは、現在の移行(app2.migration_file_name)は、古いファイルを置き換えます、これはマイグレーションを実行するためのジャンゴをprevenentます二回

、4-追加するにはmigrations.AlterModelTable

+0

で、テーブルの名前を変更するTE移行ファイルを作成することをDjangoのために教えてくれますこのメソッドを使用してアプリの名前を変更すると、djangoはコンテンツタイプを更新しないことがわかりました。また、移行が実行されたときに、各アプリケーションモデルに対して新しいコンテンツタイプ(および権限)が作成されます。これは、一般的なforeignkeysなどを使用している場合に問題を引き起こします。これは、 'RunPython'演算をすべてのAlterModelTableの前に追加することでこれを修正しました。私の 'RunPython'関数は' ContentType = apps.get_model( 'contenttypes'、 'C​​ontentType') '' 'ContentType.objects.filter(app_label = 'old_app')を実行します。update(app_label = 'new_app')' – DBrowne

0

アプリの名前を変更することは、常に難しい問題です。

マイグレーションの名前を変更する単純なテーブルのように移行すると、アプリが単純に存在しないため、古いアプリのapps.get_model()は機能しません。

が見つかりましたthis answerです。私はあなたが南を使用していないことを知っているが、私は同じ方法で動作するかもしれないと思う、ちょうど南のステップをスキップします。

  1. がからJSONファイルで参照の名前を変更する答えでスクリプトを実行しJSONファイル

  2. に、名前を変更する前に、データをダンプ:

    基本的に、あなたがする必要はありAPP1にAPP2

  3. アプリの名前を変更しますAPP2

  4. のためのテーブルを作成するための1実行

  5. (すべてのインポート参照、settings.py、など)APP2 への移行は、データベースにJSONファイルからデータを読み込み

  6. APP1テーブル

  7. をドロップ

このヘルプが欲しいです。

関連する問題