Daniel Roseman が述べたように、syncdb
既存のテーブルを変更しません。
これを行うには、south
http://south.aeracode.org/を使用する必要があります。
を使用するために既存のアプリケーションを変換するための非常に簡単な手順south
です。easy_install
まず、と入力してインストールできますeasy_install South
。Mercurial またはスナップショット tar.gz からインストールする場合は、ここに手順が記載されています。
インストールしたら、既存のアプリケーションを使用するように変換する必要がありますsouth
。アプリケーションのsettings.py
ファイルで、 を追加south
しINSTALLED_APPS
てから再実行しpython manage.py syncdb
ます。ここで行っていることは、アプリケーションのデータ テーブルを追加することだけsouth
です。あなたのモデルではまだ何もしていません。
ここで、元の投稿で行った変更を元に戻したいと考えています。あったことに戻ります。その変更は数分後に行いますが、まず、アプリケーションが現在south
どのように見えるかを伝える必要があります。
python manage.py convert_to_south <appname>
<appname>
アプリケーションの名前に置き換えます。これにより、アプリケーションの初期移行ファイルが作成されます。
これらの変更をバージョン管理にコミットします (または、通常のプロセスでアプリケーションを他の開発者に配布します)。migrations
これは、アプリケーション ディレクトリに名前が付けられた新しいフォルダーである必要があります。このフォルダに表示されるすべてのファイルをコミット/配布する必要があります。
一度だけ: アプリケーションがインストールされているすべての場所で、このコマンドを実行して、同様に南を使用するように変換する必要があります。ドキュメントpython manage.py migrate <appname> 0001 --fake
によると、convert_to_south が行う最初の移行では、既存のすべてのテーブルを作成しようとするため、これが必要です。代わりに、 を使用して既に適用されていることを South に伝えると、次の移行が正しく適用されます。--fake
次に、変更を行います。モデルを再編集して、必要な変更を加えます。モデルを保存します。
次のコマンドを実行しますpython manage.py schemamigration <appname> --auto
。South は、モデルとそれらがどのように変更されたかを分析し、移行スクリプトを作成します。これが、変更を元の状態に戻す必要がある理由です。そうしsouth
ないと、移行元がわかりません。
完了したら、実行しますpython manage.py migrate <appname>
。再度、migrations
フォルダーをコミットまたは配布します。これが展開される各場所で実行する必要がありますpython manage.py migrate <appname>
。
将来、スキーマを変更するときは、実行 python manage.py schemamigration <appname> --auto
して移行スクリプトを作成しpython manage.py migrate <appname>
、変更をインストールします。
south
また、移行中に処理できる他のことについては、ドキュメントを一瞥することをお勧めします。ただし、上記で開始できるはずです。South のドキュメントの場所はhereです。