3

シナリオ:Djangoアプリケーションに、Southの管理下に置いたことがないアプリがあります。私はずっと前にsyncdbを実行しましたが、このアプリのモデルを変更する必要はありませんでした。ずっと、私は明らかにそれらのテーブルにデータを追加してきました。

さて、このアプリを南管理下に置きたいのですが、テーブルができたら移行ファイルは作成できますが、当然実行できません。既存のテーブルのデータベースエラーが発生します:

django.db.utils.DatabaseError: (1050, "Table 'ooyala_ooyalaitem' already exists")

これは私にはかなり明白です。私が疑問に思っていたのは、現在のテーブルを使用するためにmigrateコマンドを実行するスマートな方法があるかどうかです。データをダンプしたり、テーブルを手動で削除したり、移行を実行したり、データを再入力したりしたくありませんでした。また、このためのデータ移行を作成したくもありませんでした。

これについて何かアイデアはありますか?それも可能ですか?

御時間ありがとうございます。

4

1 に答える 1

12

これはマニュアルでカバーされています

南を使用するようにアプリを変換するのは非常に簡単です。

  • settings.pyを編集し、「south」をに入れますINSTALLED_APPS(適切な場所にインストールしたと仮定します)
  • 実行./manage.py syncdbして、Southテーブルをデータベースにロードします。syncdbの外観が異なることに注意してください-Southはそれを変更します。
  • 実行./manage.py convert_to_south myapp-Southは自動的に作成し、最初の移行を適用するふりをします。

変更を加える前に変換する必要があることに注意してください。Southは、最後の移行のフリーズ状態と比較して変更を検出するため、Southの使用に変換する前からの変更を検出できません。

于 2012-12-07T13:25:36.947 に答える